ターミナルアプリケーション(Mac)を再起動せずに、ターミナルからbashを再起動しますか?


46

私は周りを見て、この質問に対する答えを少し探しましたが、私はそれを見つけていないようです(これは奇妙です)。

私の質問は、macのターミナル内からbashセッションを再開する簡単な方法はありますか。ターミナルアプリケーションを閉じて再起動した場合と同じ動作を望みます(すべての変数がリセットされ、.bash_profileがソースされるなど)。

.bash_profileを入手する方法は知っていますが、それは私が望むものではありません。これをしたい理由の1つは、bashプロンプトのプラグインに、色が複数回ロードされるのを防ぐコードがあるためです。したがって、.bash_profileをソースしても色変数はリロードされず、変更を有効にするためにターミナルアプリケーションを再起動する必要があります。

回答:


64

exec bash 現在のシェルプロセスを(の新しいインスタンス)bashに置き換える必要があります。


2
ターミナルアプリケーションのbashはインタラクティブシェルであり、exec bashそのインタラクティブシェルのみを再起動しますか?また、execコマンドの機能とオプションを正確に説明できますか?ありがとう!
マティアス

execは、現在のプロセスを新しいプロセスに置き換えます。Bashには非常によく書かれていますが、残念ながら検索が難しいマンページがあります。を入力しman bash、文字列SHELL BUILTIN COMMANDSの最後のインスタンスを見つけて、スクロールダウンしてexecにします。要するに、-cフラグを渡すと、環境変数なしで実行されます(目的に必要かもしれませんが、私にはわかりません)。他の引数-lと-aは、おそらくあなたが望むものではありません/ obscureおよび特定の機能)。コマンドを省略した場合、現在のシェルで新しいファイル記述子を開くためにexecを使用することもできます。
ミューザー

現在のシェルでexecを使用して新しいファイル記述子を開く方法の例を紹介できますか?そして、インタラクティブ/ログインシェルについての私の質問はどうですか。端末で実行されるシェルは対話型シェルであり、すべてのexecコマンドが触れます。最後に、この質問の承認された回答では、-lフラグを指定したexecコマンドを推奨していますが、それが何をするのか理解できません。たくさんの質問をして申し訳ありませんが、私は自分が使用するコマンドを理解したいだけです。
マティアス

1
ごめん、はい。Macについてはわかりませんが、Linuxの世界では、少なくともグラフィカル端末から実行されるシェルは(通常)ログインシェルではなく、ターミナル自体やログインシェルではなく、対話型シェルのみを再起動しています。-lこれはbashの引数であり、ログインシェルのように動作するだけです。現在のシェルでファイル記述子を開くことは質問とは関係ありませんがexec 4<>test.txt、たとえば、ファイル記述子4がtest.txtを指すようにするために使用できます。その後、シェルの残りの部分でecho test>&4test.txtに出力することができます。
ミューザー


1

受け入れられた答えは、bashを使用しているシェルに最適です、これもOPが尋ねたものですが、macOSでターミナルをデフォルト以外のシェル(zsh)で使用しており、コマンドを実行してもexec bash明らかに望ましい効果がありません:デフォルトのシェルの代わりにbashを起動します。

したがって、環境に依存しないコマンドは、ユーザーのデフォルトシェルを保存するexec $SHELL環境変数$SHELLを使用します。

また、macOS CatalinaでAppleがbashをzshに置き換えて、OPがいずれかを実行しようとしているかexec zshexec $SHELLmacOS 10.15に更新した後に実行する方法があることに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.