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接続
- モジュール強度のわかりやすい図 モジュール結束性 独立性
- ゴール指向要求分析 アイアスター kaos法
- 平成24年春期 午前問22 解き方メモ
この記事を読んだ人は次の記事も読んでいます:
- smarty 配列の要素の扱い
- mysql 文字化けを防ぐ エンコード
- 置き換えた文字列を\1などに格納して表示させる linuxコマンド
- オープンソースソフトウェアを利用することによるメリットはどれか。
- 外部からPHPを実行させる file_get_contents
- キーロガーKeylogger
- xmlのエスケープシーケンス 特殊文字