この問題に似た環境があります。対話型および非対話型タスク用のさまざまなシェル
私は現在、「公式」のデフォルトシェルとしてtcshを使用しています。対話型シェルの場合、デフォルトではexec /bin/bash
私の~/.login
ファイルからインポートされます。
bashを非対話型シェルにする方法はありますか?つまり、これによりssh myserver env
シェルは次のように印刷されます/bin/tcsh
。~/.cshrc
どここれを行うためにそこに何かを入れることはできますが、わかりません。何私はそこに置いた。それとも、このようなものを置くことができる別の場所がありますか?
現在、上記のsshコマンドは、非対話型シェルをexec /bin/bash
使用すると中断されます(おそらく非対話型シェルで対話型シェルを実行しようとしているため)。~/.cshrc
私が望むことをすることは可能ですか?
ベストアンサー1
リモートシステムがLinuxの場合は、以下を追加してみてください~/.tcshrc
。
if ($?SSH_CONNECTION && $shlvl == 1) then
set sh = /bin/bash
set cmdline = "`tr '\0\n' '\n\1' </proc/$$/cmdline`"
if ($#cmdline > 2) then
exec $sh -c 'exec "$0" -c "$(printf %s "$1" | tr "\1" "\n")"' $sh $cmdline[3]:q
endif
endif
sshを呼び出すときにssh user@host cmd
サーバーがデフォルトで実行するのは、user
sshを使用してログインシェルを呼び出し、-c
それcmd
を引数として渡すことです。exec /bin/bash
yours から呼び出したばかりの~/.cshrc
bash は引数なしで呼び出され、標準入力からコマンドを読み取ることが期待されます。つまり、ssh user@host cmd
Ctrl-CまたはCtrl -Dを押すまで「中断」されたようです。
上記のkludgeはcmd
それから引数を取得しようとし、/proc/<pid>/cmdline
同じ/bin/bash
方法で()選択したシェルを呼び出して-c
引数cmd
として渡します。\1
ASCII制御文字(Ctrl-A)がないとします。cmd
。これとほとんどの合併症は で改行文字を保存しようとするために発生しcmd
、私が正しくしているかどうかは全くわからない ;-)
改善(および単純化)を歓迎します。