我正在尝试从 awk 中每行设置一个环境变量:
$ <source command> awk '/inst/ { n = split($0,a,"/"); cmd = "setenv " a[n-1] "_ver" $0; system(cmd) }'
但是我得到的结果是“sh:setenv:找不到命令”。
答案1
setenv
是一个仅限 csh 的命令,但system()
通过 Bourne shell ( /bin/sh
) 运行其参数,而不是csh
.您希望命令适用export VARIABLE=value
于 Bourne shell。
然而,即使你这样做了,也是没有效果的。system()
启动一个新的 shell 并在该 shell 中运行命令。一旦命令终止,该 shell 及其环境就会消失。所以你设置的环境变量很快就消失了。
您需要做的是awk
生成要运行和输出的命令列表csh
(不要尝试运行它们)。然后您需要创建调用awk
read输出的 shellawk
并运行它:
eval `the awk command`