第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

shell腳本可以設(shè)置調(diào)用shell的環(huán)境變量嗎?

shell腳本可以設(shè)置調(diào)用shell的環(huán)境變量嗎?

陪伴而非守候 2019-06-29 17:44:21
shell腳本可以設(shè)置調(diào)用shell的環(huán)境變量嗎?我正在嘗試編寫(xiě)一個(gè)shell腳本,在運(yùn)行時(shí),它將設(shè)置一些環(huán)境變量,這些變量將留在調(diào)用者的shell中。setenv FOO foo在CSH/tcsh中,或export FOO=foo在sh/bash中,只在腳本執(zhí)行期間設(shè)置它。我已經(jīng)知道了source myscript將運(yùn)行腳本的命令,而不是啟動(dòng)新的shell,這可能導(dǎo)致設(shè)置“調(diào)用者的”環(huán)境。但問(wèn)題是:我希望這個(gè)腳本可以從bash或csh調(diào)用。換句話(huà)說(shuō),我希望任何一個(gè)shell的用戶(hù)能夠運(yùn)行我的腳本并更改他們的shell環(huán)境。因此,“Source”對(duì)我不起作用,因?yàn)檫\(yùn)行CSH的用戶(hù)無(wú)法獲取bash腳本,而運(yùn)行bash的用戶(hù)無(wú)法獲取CSH腳本。是否有任何合理的解決方案不需要在腳本上編寫(xiě)和維護(hù)兩個(gè)版本?
查看完整描述

3 回答

?
眼眸繁星

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊

您的shell進(jìn)程具有父進(jìn)程環(huán)境的副本,并且不訪(fǎng)問(wèn)父進(jìn)程的任何環(huán)境。當(dāng)shell進(jìn)程終止時(shí),您對(duì)其環(huán)境所做的任何更改都將丟失。尋找腳本文件是配置shell環(huán)境最常用的方法,您可能只想咬緊牙關(guān),并為這兩種shell中的每一種都維護(hù)一個(gè)。


查看完整回答
反對(duì) 回復(fù) 2019-06-29
?
千巷貓影

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊

您將無(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)似的功能。


查看完整回答
反對(duì) 回復(fù) 2019-06-29
  • 3 回答
  • 0 關(guān)注
  • 2057 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)