私の期待スクリプト
#!/usr/bin/expect -f
#I tried replacing sh - with bash -s still no positive results
spawn ssh xxxx@yyyy "sh -" < test.sh
expect "password: "
send "zzzzz\r"
expect "$ "
端末でこのコマンドを実行すると正常に動作します。
ssh xxxx@yyyy "sh -" < test.sh
しかし、expect
スクリプトを通して実行すると失敗します。
これは、Expectスクリプトを介して実行したときの出力です。どこが間違っているのかわかりますか?
bash: test.sh: No such file or directory
PS:はい、ファイルが存在し、資格情報が正しいです。
答え1
<
問題は、sshを単独で実行すると(入力されたシェルを介して)リダイレクトがローカルで実行されますが、それを実行するとリモートシステムで実行されることです。expect
指定spawn
した引数は単にコピーされるため、<
sshコマンドは次のようになります。そのうちのいくつかはリモコンに渡されます。これは'ssh' 'xxxx@yyyy' "sh -" '<' 'test.sh'
シェルに入力したようには機能しません。
SSHの前にリダイレクトを解決するには、中間シェルコマンドを追加する必要があります。例えば、
spawn sh -c "ssh xxxx@yyyy sh - < test.sh"