我想從bash腳本中產生一個bash子shell,該腳本允許我初始化環境變量並執行一些操作,以便在腳本結束用戶時位於具有初始化環境變量的子shell中。如何從腳本結束後保留的bash腳本產生bash子shell
通過測試,我發現如果腳本中有指令/bin/bash,子腳本就會生成,並且腳本結束時用戶在子shell中。如果我執行退出,子shell將終止,並且用戶返回到父shell。
我現在希望能夠初始化環境變量,並根據腳本中給出的參數在子shell中執行一些任務。
我怎麼能做到這一點?
我想從bash腳本中產生一個bash子shell,該腳本允許我初始化環境變量並執行一些操作,以便在腳本結束用戶時位於具有初始化環境變量的子shell中。如何從腳本結束後保留的bash腳本產生bash子shell
通過測試,我發現如果腳本中有指令/bin/bash,子腳本就會生成,並且腳本結束時用戶在子shell中。如果我執行退出,子shell將終止,並且用戶返回到父shell。
我現在希望能夠初始化環境變量,並根據腳本中給出的參數在子shell中執行一些任務。
我怎麼能做到這一點?
exec是你在找什麼
$ cat reshell.sh
#!/bin/bash
export MY_ENVIRONMENT=foo
chdir /home/bar
exec $SHELL
其中exec
與繼承的腳本環境的新外殼替換當前正在運行的腳本。這對於你從中跑出來的那個仍然是一個附屬的外殼,但它將只有一層;例如:
$ pwd
/home/chmike
$ ./reshell.sh
$ pwd
/home/bar
$ exit
$ pwd
/home/chmike
exec $SHELL
使用代替exec /bin/bash
允許腳本調用用戶的優選殼的情況下,它不抨擊。
導出腳本中的所有環境變量,然後生成一個子shell。 子殼將設置所有的環境變量。
export EXAMPLE="<value>"
...
#spawn a subshell
/bin/bash
這正是我想避免的。我不想混淆環境變量的父shell,我也需要執行一些腳本。調用初始化腳本作爲--init-file參數可以做到這一點。 – chmike 2013-03-13 11:21:45