シェルスクリプトを初めて作成しています。私は愚かな/繰り返しの質問を避けるためにできる限り多くの研究をしようとしました。その繰り返し/間違った質問があれば申し訳ありません。シェルスクリプトを使用してリモートコンピュータ上でスクリプトを実行した後に接続を終了する際の問題
私は、リモートのLinuxマシンに接続してスクリプトを実行するシェルスクリプトを持っています。私はssh接続を起動し、ジョブを起動するコマンドを発行するために 'expect'を使用しています。しかし、私は仕事を完了した後に接続を閉じる間に問題が発生しています。
これは私のスクリプトです:
set prompt "(%|#|\\$|%\]) $"
expect -c 'spawn ssh [email protected]$STAGE ;
expect password ; send "$PASS \n";
expect -regexp "$PROMPT"; send "./settings.$UN.sh > settings_log.txt \n";
interact'
このスクリプトが正常に($ UNと$ STAGEパラメータがスクリプトに入力され、私は簡単にするためにここにいることを省略。)私のためのスクリプトファイルを実行します。しかし、これは私にオープンな接続を残す。 は私が
expect -c 'spawn ssh [email protected]$STAGE ;
expect password ; send "$PASS \n";
expect -regexp "$PROMPT"; send "./settings.$UN.sh > settings_log.txt \n";
expect -regexp "$PROMPT"; send "exit \n"'
の上、下記の代わりに使用してスクリプトを実行した後、接続を終了しようとしたこれは、接続を閉じませんが、私は私のスクリプトファイルがまったく実行されなかったことに気づきました。また、settings_log.txtはまったく生成されません。
これは、exitコマンドが完了する前にプロセスを中断しているということですか?私は退室する前に「睡眠」を使ってみましたが、助けにはなりませんでした。期待通りの接続を終了するには、より良い方法がありますか? 何か助けていただければ幸いです。
、あなたはあなたの送信が
\r
ない\n
でコマンドを終了し、ない期待しますか?私は* expect *に慣れていません。 – user359996これは初めてのことです。 expect -regexp "$ PROMPT"は、シェルが作業を完了するのを待って、ユーザー入力を返します。たとえば、 を使用してssh接続を開始します。 expect -c 'spawn ssh $ UN @ $ STAGE; sshがパスワードを尋ねることを知っています。私はこれを知っていますので、準備が整ったことをスクリプトに伝え、これが発生するとパスワードを送信することができます。 パスワードを期待してください。 "$ PASS \ n"を送ってください また、私は何をしようとしています。私は変数($ PROMPT)を一番上に定義し、次の文でそれを使用しました。 – PraveenGorthy