変数を引き継いで実行したい場合、
[#!/bin/bash/except]ファイルでは、シェルからの変数がうまく引き継げなかった。
シェル内で、実行したい場合、expect -c 以下を””でくくって、実行できる。
また、初回接続の「Are you sure you want to continue connecting」を聞かれたくない場合は、
{}を使用して、その文言が出てきた場合のみ、send ”yes”を渡すこともできる。
ユーザー:user
パスワード:pass$word
ホスト:xxx.co.jp
#!/bin/bash -sh DIR=/home/directory/ FILE=file.txt expect -c " spawn sftp -oPort=22 user@xxx.co.jp expect { \"\(Are you sure you want to continue connecting \(yes\/no\)\? { send \"yes\r\" } } expect \"user@xxx.co.jp's password:\" send \"pass\\\$word\r\" expect \"sftp>\" send \"put $DIR/$FILE\r\" expect \"sftp>\" send \"bye\r\" "
パスワードなどで、$が混ざってたりする場合は、それもエスケープ。
\\\$ (文字として$をつかう場合。変数で使うならエスケープしなくていい。)
ex)pass$wordという文字列がパスワードなら
send \”pass\\\$word\r\”
変数を{}で囲む必要がある時は以下のような感じで。
send \”put $dir/${month}_monthly.tsv\r\”