web-dev-qa-db-ja.com

bashスクリプトからインタラクティブシェルを実行する

私は現在、SSHトンネルを作成するBashスクリプトを書いています。これが完了したら、SSHトンネルを開いた状態でシステムで作業できるように、スクリプトで新しいローカル(!)インタラクティブシェルを開きます。

exitと入力すると、ローカルシェルが閉じられ、元のスクリプトが引き続き実行されます。

私の現在のアプローチは基本的に次のようになります。

#!/usr/bin/env bash

set -e

ssh -N user@ip -L xxx:xxx &
SSH_CONNECTION=${!}

trap "kill ${SSH_CONNECTION}" ERR

sleep 3
bash -i

kill ${SSH_CONNECTION}

これまでのところ、ローカルシェルの実行を除いて、すべてが機能しています。実際にシェルを取得し、入力することもできますが、<Return>を押しても何も起こりません。

私が間違っていることについて何か考えはありますか?

1
Golo Roden

-fを使用して、接続が確立されるとバックグラウンドに移行するようにする必要があります。その場合、&は必要ありません:

ssh -Nf  -L xxx:xxx user@ip

処理はbashに入るはずです。

1
Jakuje