2013-04-11 55 views
0

我相信有一個更簡單的方法來做到這一點,所以我都耳熟能詳。AWK調用sh而不是csh

sort -nrk 7 my_list.tsv | tail -n 1 | awk '{print("setenv INPUT_DIR `pwd`/"$1)}' 

我的.tsv中的第一項是文件名(排序),我試圖在csh中設置爲環境變量。我也想添加拉路徑。我雖然這會工作,但...

sh: setenv: command not found 

即使我在csh。我可以使用awk系統函數來使用csh/tcsh嗎?

J

+0

您發佈的腳本與awk system()命令無關,因此您對該腳本或system()的問題? – 2013-04-11 12:09:51

回答

0

'添加拉路徑'。 ??

你的意思

 echo "fileName" | awk '{printf("setenv '`pwd`'/%s\n", $1)}' 

輸出

 setenv INPUT_DIR /home/shellter/filename 

我已經更換了你sort ... | tail ..作爲似乎並沒有成爲你的核心問題。

另請注意,單引號可防止正在處理的反引號命令替換。你關掉單引號,得到你的cmd-sub值,再次引用單引號。

如果這不是你的意思,請編輯你的問題,並用一個簡單的echo「string」代替sort ... tail ...,幷包含預期的輸出。它也將有助於包括你目前得到的輸出。

要回答標題中的問題,awk幾乎肯定會使用存儲在$ SHELL環境變量中的值。或者可能有另一個變量,那麼set | grep /bin/shsetenv | grep /bin/sh也是如此,以便查看對/bin/sh的引用正在設置的位置。然後決定你如何去管理它。

當我運行你的代碼時,我沒有得到任何表明shell被執行的跡象。我得到

setenv INPUT_DIR `pwd`/file 

但我在ksh下運行代碼。我沒有csh使用測試。但對於特定情況,這應該不重要。

IHTH