頻繁に必要なコマンドを実行するシェルスクリプトを作成しようとしています。公開鍵と秘密鍵のペアを使用してパスワードプロンプトをスキップするようにsshログインを行いました。そして、いくつかの検索の後、私は次のようないくつかのコードを実行することができます:
ファイル:ssh.sh
ssh -X [email protected] << EOF
cd /root/myDir
gedit a.c b.c
EOF
しかし、次のように入力しても違いはわかりません。
ssh -X [email protected] << EOF
cd /root/myDir
gedit a.c b.c &
EOF
&
任意のdifference.Withを行わない&
一般のgeditを実行した後、それが背景に送信されますと、プロンプトが来ます、。しかし、geditの後にプロンプトが表示されません。(次の行にあるものはすべて実行されますが、私が置いた場合のようにecho "Hello"
、表示されHello
ます。)
ここで何が問題になっていますか?他に方法はありますか?SSHを実行し、シェルスクリプトを介してコマンドを実行したいと思います。しかし、シェルスクリプトの実行が終了した後にログアウトしたくありません。上記のスクリプトのように繰り返されない独自のコマンドをいくつか実行した後、手動でログアウトしたいと思います。
がない&
場合、リモートで実行しているスクリプトは「に変更してから/root/myDir
実行しgedit
、終了するのを待ちます」と表示します。のバリアント&
はgedit
、終了するのを待たないように言っています。いずれにせよ、シェルはスクリプトの最後のコマンドを実行すると終了します。
スクリプトを実行してから、インタラクティブに入力するコマンドをさらに実行する場合は、最後にインタラクティブシェルを実行する必要があります。
ssh -Xt [email protected] 'cd /root/myDir && gedit a.c b.c; exec bash'
このオプション-t
は、SSHにサーバー上に仮想端末をセットアップするように指示します。デフォルトでは、リモートコマンドを渡して実行する場合はそれを行いません。exec bash
最後に、シェルに、bashの新しいインスタンスに置き換えるように指示します。これは、入力が端末からのものであるため、対話型シェル(プロンプトの表示、コマンドのリッスンなど)になります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加