ssh経由expect
で簡単なコマンドを実行するために使用したい。cat /tmp/id_rsa.pub
シェルでは、この問題を実行できます (手動でパスワードを入力して)
ssh root@localhost 'cat /tmp/id_rsa.pub'
でこれを自動化したいexpect
。私のexpect
スクリプトは、
#!/usr/bin/expect
eval spawn ssh root@localhost 'cat /tmp/id_rsa.pub'
expect "password:"
send "123456"
expect eof
エラーがスローされますbash: cat /tmp/id_rsa.pub: no such file or directory
。私にはとても奇妙に見えます。考えられる原因は何ですか?
編集:いくつかのテストの後、これは の場合だけでなく、一般的であることがわかりましたcat
。生成されたコマンドの引数にスペースが含まれている場合 (引用符で囲まれている場合でも)、問題が発生します。たとえば、次cat /tmp/id_rsa.pub
のようなスペースを含む他のコマンドに置き換える
eval spawn ssh root@localhost 'which java'
と文句を言いbash: which java: command not found
ます。しかし、それを に置き換えるとpwd
、
eval spawn ssh root@localhost 'pwd'
それはうまくいきます。