1月 292014
 

変数を引き継いで実行したい場合、

[#!/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\”

このエントリーをはてなブックマークに追加
はてなブックマーク - シェルスクリプト内でexpectを使ってSFTP接続
[`google_buzz` not found]
[`yahoo` not found]
[`livedoor` not found]
[`friendfeed` not found]
[`tweetmeme` not found]
[`grow` not found]
[`evernote` not found]