お世話になります。
前提
OS:ローカルリモート先共にCentOS7
expect version 5.45
シェルスクリプトにてexpectを用いて以下ような仕組みを作ろうと思っています。
1.sftp接続を行う。
2.リモート先でディレクトリの存在チェックを行う。
3.リモート先でディレクトリが存在しない場合は、リモート先でディレクトリの作成を行う。
ソースコード
shell
1#!/bin/bash 2 3DIR_PATH=$1 4 5expect -c " 6set timeout 30 7 8#sftpコマンドを叩く 9spawn sftp hoge@000.000.00.000 10 11expect { 12 default {exit 2} 13 \"continue connecting (yes/no)?\" {send \"yes\r\"; exp_continue} 14 \"assword\" 15} 16 17send \"hogehoge\r\" 18expect { 19 timeout {exit 2} 20 \"Permission denied\" {exit 2} 21 \"sftp>\" 22} 23 24send \"ls ${DIR_PATH}\r\" 25expect { 26 timeout {exit 2} 27 \"not found\" {send \"mkdir ${DIR_PATH}\r\"; exp_continue} 28 #\"not found\" {exit 3} 29 \"sftp>\" 30} 31 32#接続を閉じ終了する 33send \"quit\r\" 34exit 0 35" 36 37#結果を出力 38echo $?
発生している問題
ディレクトリの存在チェックはlsコマンドを用いて判断しています。
「not found」が返ってきたら存在しないと判断して
mkdirコマンドでディレクトリの作成を行うつもりなのですが、
現在思ったようにmkdirコマンドが実行されません。
shell
1expect { 2 timeout {exit 2} 3 \"not found\" {send \"mkdir ${DIR_PATH}\r\"; exp_continue} ←これが実行されない。 4 #\"not found\" {exit 3} ←sendを止めてexitにすると実行される。 5 \"sftp>\" 6}
恐らくsendの指定方法が間違っているのだと思うのですが、調べても分からず質問させて頂きました。
回答1件
あなたの回答
tips
プレビュー