3

bashスクリプトからbashサブシェルを生成して、環境変数を初期化し、いくつかのテイストを実行して、スクリプトが終了したときにユーザーが初期化された環境変数を持つサブシェルにいるようにします。

テストの結果、スクリプトに/ bin / bash命令がある場合、スクリプトが終了するとサブシェルが生成され、ユーザーはサブシェルにいることがわかりました。exitを実行すると、サブシェルが終了し、ユーザーは親シェルに戻ります。

ここで、スクリプトで指定された引数に基づいて、環境変数を初期化し、サブシェルでいくつかのタスクを実行できるようにしたいと思います。

どうすればそれを達成できますか?

4

2 に答える 2

4

execはあなたが探しているものです

$ cat reshell.sh
#!/bin/bash
export MY_ENVIRONMENT=foo
chdir /home/bar
exec $SHELL

ここでexec、現在実行中のスクリプトを、スクリプトの環境を継承した新しいシェルに置き換えます。これは、実行元のシェルの下位シェルになりますが、深さは 1 層のみになります。例えば:

$ pwd 
/home/chmike
$ ./reshell.sh
$ pwd
/home/bar
$ exit
$ pwd
/home/chmike

exec $SHELL代わりに使用するとexec /bin/bash、スクリプトが bash でない場合にユーザーの優先シェルを呼び出すことができます。

于 2013-03-13T11:20:19.557 に答える
0

スクリプト内のすべての環境変数をエクスポートしてから、サブシェルを生成します。サブシェルには、すべての環境変数が設定されています。

export EXAMPLE="<value>"
...
#spawn a subshell
/bin/bash
于 2013-03-13T11:14:44.267 に答える