環境変数をコピーせずに別のシェルに切り替える

環境変数をコピーせずに別のシェルに切り替える

tcshで次のことを試した場合:

exec /home/path/to/my/zsh

動作します(Zshシェルを入力しました)

しかし、私が試してみると

exec -c /home/path/to/my/zsh

私は得る:

-c Command not found

Zshシェルに切り替えて「空の」状態で起動するにはどうすればよいですか? (つまり、から継承された環境変数はありませんtcsh)。

ベストアンサー1

なぜこれを行うのかはわかりませんが、次のようにできます。

exec env -i /home/path/to/my/zsh

あるいは、いくつかのデフォルトの環境変数が欠落しているため$PATH、多くの操作が機能しない可能性があります。$HOME$TERM

いくつかの変数をホワイトリストに追加し、残りを削除するには、次の手順を実行します。

exec env -i HOME="$HOME" TERM="$TERM" /home/path/to/my/zsh

起動時に環境を復元するには、tcsh最初に次を挿入します~/.tcshrc

sh -c 'export -p' > ~/.initial-env

次に、次のようにします。

exec env -i sh -c ". $HOME/.initial-env; exec /path/to/zsh"

つまり、tcsh起動時に環境が保存され、zsh が実行されると復元されます。

必要なのはシェルを変更することですが、zshこれを行う必要がない場合chshzshインストールされていないかインストールされたものが20年前であるか)、(15年前の思い出を思い出させます(マッソッサ!)。全く同じ状況で(代わりにcshtcsh)コンテンツを次の~/.loginように置き換えることができます。

setenv SHELL /path/to/zsh
exec $SHELL -l

そしてあなたの.tcshrc

設定は$SHELLシェルを指定します好み(これはシェルを起動する必要があるとき、xtermまたは...などのviアプリケーションが起動することです。)

それをあなたの義務に置き、~/.login一度だけ完了したことを確認してください。tcsh変更後、後でログインセッション中に作業が開始されないことを願っています$SHELL。環境変数定義を入れて~/.loginも構い~/.zprofileません~/.profile。あなたに走りました。

tcsh -lログアウトする前にテストしてください。

おすすめ記事