2013-03-13 243 views
1

我想從bash腳本中產生一個bash子shell,該腳本允許我初始化環境變量並執行一些操作,以便在腳本結束用戶時位於具有初始化環境變量的子shell中。如何從腳本結束後保留​​的bash腳本產生bash子shell

通過測試,我發現如果腳本中有指令/bin/bash,子腳本就會生成,並且腳本結束時用戶在子shell中。如果我執行退出,子shell將終止,並且用戶返回到父shell。

我現在希望能夠初始化環境變量,並根據腳本中給出的參數在子shell中執行一些任務。

我怎麼能做到這一點?

回答

4

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允許腳本調用用戶的優選殼的情況下,它不抨擊。

0

導出腳本中的所有環境變量,然後生成一個子shell。 子殼將設置所有的環境變量。

export EXAMPLE="<value>" 
... 
#spawn a subshell 
/bin/bash 
+0

這正是我想避免的。我不想混淆環境變量的父shell,我也需要執行一些腳本。調用初始化腳本作爲--init-file參數可以做到這一點。 – chmike 2013-03-13 11:21:45