我有一个命令处理函数,它运行它的参数并将结果输出到一个文件中。这些命令的输出现在必须在转到文件之前进行处理。
我只有一个要求:echo "var is: $var"
必须显示将在代码中进一步使用的结果。
这打破了我的要求:"${@:1}" | perl -pe 's/\**//g' >> './test.log'
我想象这样的事情:
"${@:1}" 1>> perl -pe 's/\**//g' >> './test.log'
但它不起作用。
我已将代码简化为以下内容:
process() {
"${@:1}" 1>>'./test.log'
}
process eval 'var=$(echo -e "*****ONE *****WORD"); echo -e "$var";'
echo "var is: $var"
目前这个函数输出:
screen :"var is: *****ONE *****WORD"
logfile:"*****ONE *****WORD"
.
要求的结果:
screen :"var is: *****ONE *****WORD"
logfile:"ONE WORD"
我怎样才能做到这一点?
PS。muru 问我为什么使用 eval。我回答了,因为没有其他方法可以在不复制代码的情况下填充变量。不幸的是,我们在他的回答下的讨论被删除了。
由于您
eval
出于某种奇怪的原因在此处使用设置变量,因此它必须在当前 shell 中运行,而管道不是这种情况。所以你可能需要进程替换:例如: