シェルスクリプトの現在のシェルでプログラムを実行します。
.ssh設定を解析し、fzfを使用してエントリを選択し、そのホストに接続できる小さなシェルスクリプトを作成しました。 #!/bin/bash set -o nounset -o errexit -o pipefail list_remote_hosts() { choice="$(cat $HOME/.ssh/config | awk -v RS= -v FS=\\n -v IGNORECASE=1 ' { ip = "" alias = "" id_file = "" username = "" port = "" for (j = 1; j <= NF; ++j) { split($j, tmp, " ") if (tmp[1] == "Host") { alias = tmp[2] } if (tmp[1] == "Hostname") { ip = tmp[2] } if (tmp[1] == "IdentityFile") { id_file = tmp[2] } if (tmp[1] == "User") { username = tmp[2] } if (tmp[1] == "Port") { port = tmp[2] } } if (ip || alias && alias != "*") { if (port == "") { port = "22" } print "ssh " username "@" ip " -i " id_file " -p " port } } ' | fzf)" "$($choice)" } list_remote_hosts これはうまくいきますが、現在シェルの所有権を付与するのに問題があります。接続後、スクリプトはフリーズします(sshがサブシェルで起動されたようです)。たとえば、終了を入力し、ssh コマンドが終了すると出力を表示できます。 端末でsshコマンドを実行するのと同じ動作を得るためにスクリプトを実行すると、現在のシェルに自動的に所有権を付与したいと思います。 && zsh追加や使用evalなど、さまざまな方法を試しましたが、execどちらも機能しませんでした。どうすればいいですか?