Expectスクリプトのsendコマンドに特殊文字「と`」を使用してください。

Expectスクリプトのsendコマンドに特殊文字「と`」を使用してください。

すべてのサーバーでルートパスワードをリセットする必要があるコマンドを実行しようとして、Linuxサーバーでコマンドを実行しようとしています。自動化に予想されるスクリプトを使用する複数のサーバーがあるため、コマンドには二重引用符やアクセントなどの特殊文字が含まれています`。したがって、実行中に二重引用符の後に追加の文字がエラーとして表示されます。

send " chage -l root | grep -i "Password expires" | if [[ `awk -F : '{print $2}' ` = "never" ]] ; then echo "password needs to be changed " ;else echo "skipping reset " ; fi;\r"

二重引用符を試しましたが、\エラーは同じです。

答え1

補間なしで文字列が必要な場合タリウム{}(予想される言語があります)拡張する文字や変数がない場合は、次のよう{}に囲みます。

send { chage -l root | grep -i "Password expires" | if [[ `awk -F : '{print $2}' ` = "never" ]] ; then echo "password needs to be changed " ;else echo "skipping reset " ; fi;}
send \r

答え2

バックスラッシュをどこに入れましたか?すべての参照に適用されますか、またはこのような内部参照にのみ適用されますか?

send " chage -l root | grep -i \"Password expires\" | if [[ `awk -F : '{print \$2}' ` = \"never\" ]] ; then echo \"password needs to be changed \" ;else echo \"skipping reset \" ; fi;\r"

はい、その文字列がコマンドに渡され、あまりにも早く解析する必要がないため、\もう1つの文字が必要です。$bash

関連情報