您將無(wú)法修改調(diào)用者的shell,因?yàn)樗挥诓煌倪M(jìn)程上下文中。當(dāng)子進(jìn)程繼承shell的變量時(shí),它們將自己繼承副本。
您可以做的一件事是編寫(xiě)一個(gè)腳本,根據(jù)它的調(diào)用方式為tcsh或sh發(fā)出正確的命令。如果您的腳本是“Setit”,那么請(qǐng)執(zhí)行:
ln -s setit setit-sh
和
ln -s setit setit-csh
現(xiàn)在,無(wú)論是直接還是在別名中,您都可以從sh執(zhí)行此操作。
eval `setit-sh`
或者來(lái)自CSH的這個(gè)
eval `setit-csh`
Setit使用$0來(lái)確定其輸出樣式。
這讓人回想起人們是如何獲得術(shù)語(yǔ)環(huán)境變量集的。
這里的優(yōu)點(diǎn)是,Setit只是用您喜歡的任何shell編寫(xiě),如下所示:
#!/bin/basharg0=$0
arg0=${arg0##*/}for nv in \
NAME1=VALUE1 \
NAME2=VALUE2do
if [ x$arg0 = xsetit-sh ]; then
echo 'export '$nv' ;'
elif [ x$arg0 = xsetit-csh ]; then
echo 'setenv '${nv%%=*}' '${nv##*=}' ;'
fidone
有了上面給出的符號(hào)鏈接,再加上回溯的表達(dá)式,這就有了所需的結(jié)果。
為了簡(jiǎn)化對(duì)CSH、tcsh或類(lèi)似shell的調(diào)用:
alias dosetit 'eval `setit-csh`'
或者是什,bash,等等:
alias dosetit='eval `setit-sh`'
這方面的一個(gè)好處是,你只需要在一個(gè)地方保持列表。理論上,您甚至可以將列表放入文件中并將cat nvpairfilename
在“in”和“do”之間。
這就是過(guò)去登錄shell終端設(shè)置的方式:腳本將輸出要在登錄shell中執(zhí)行的狀態(tài)。別名通常用于簡(jiǎn)化調(diào)用,如“Tset vt 100”中所示。正如在另一個(gè)答案中所提到的,InstUsenet新聞服務(wù)器中也有類(lèi)似的功能。