bashサブシェルを実行し、(1)いくつかのコマンドを実行し、(2)その後、そのサブシェルに残りたいと思います。これらのそれぞれを個別に行うことができます。
-c
フラグを使用してコマンドを実行します。$> bash -c "ls; pwd; <other commands...>"
ただし、コマンドが実行されるとすぐに「スーパー」シェルに戻ります。インタラクティブなサブシェルを実行することもできます。
新しい
bash
プロセスを開始:$> bash
そして、明示的に言うまでサブシェルを終了しません...しかし、初期コマンドは実行できません。私が見つけた最も近い解決策は次のとおりです。
$> bash -c "ls; pwd; <other commands>; exec bash"
これは機能しますが、1つのサブシェルで指定されたコマンドを実行し、対話のために別のコマンドを開くため、私が望んだ方法ではありません。
これを1行で行いたい。サブシェルを終了したら、問題なく通常の「スーパー」シェルに戻る必要があります。道があるはずです~~
NB:私が尋ねていないことは...
- bashのmanページの入手先を尋ねない
- ファイルから初期化コマンドを読み取る方法を尋ねません...私はこれを行う方法を知っています、それは私が探している解決策ではありません
- tmuxまたはgnu画面の使用に興味がない
- これにコンテキストを与えることに興味がない。すなわち、質問は一般的なものであり、特定の目的のためではありません
- 可能であれば、私が望んでいることを達成するような回避策の使用を避けたいのですが、「汚い」方法で。これを1行で行いたいだけです。特に、次のようなことはしたくない
xterm -e 'ls'
exec bash
ソリューションには2つの個別のサブシェルが含まれます。連続したサブシェルが1つ必要です。
exec
に置き換えるため、親の下に1つのシェルしか残らないということです。初期化コマンドが環境変数を設定する場合、それらは実行されたシェルに存在します。
exec
あなたがそのような非エクスポート変数、関数、エイリアス、...のように、環境を経由してサブシェルに渡さいない何かを失うということです
exec bash
ソリューションはどのような点であなたに不適当ですか?