AWK调用sh而不是csh

问题描述:

我相信有一个更简单的方法来做到这一点,所以我都耳熟能详。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

'添加拉路径'。 ??

你的意思

 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