
いくつかのコマンドを実行して環境を設定し、プロンプトをユーザーに表示する bash 関数を作成しています。
走れる
bash -c 'ls'
ls
bash で実行します。
私もできる
bash -c 'ls ; exec bash'
を実行するにはls
、bash プロンプトを開いたままにします。
ただし、ファイルをソースし、いくつかのエイリアス、関数、および環境変数を設定して、プロンプトを開いたままにしておきたいので、次のようになります。
bash -c 'source env.sh ; exec bash'
もちろん、サブシェルはエイリアスや関数を継承しないので、これは機能しません。この問題を回避する方法はありますか? 引き続きユーザーの.bashrc
ソースを指定して、--init-file
オプションを使用しないようにしたいと思います。
答え1
開始時にユーザーの init ファイルをソースとする init ファイルを設定し、その後は必要な操作を実行します。
$ cat env.sh
. ~/.bashrc
export SOMEVAR="value"
somespecialfunction() {
printf '%s\n' "I'm so cool"
}
$ bash --init-file env.sh