如何在执行时重定向echo shell命令

时间:2015-01-05 13:48:24

标签: bash shell io-redirection

在问题In a shell script: echo shell commands as they are executed之后我想知道如何将执行/回显的命令重定向到文件(或变量)?

在设置bash详细模式ls $HOME > foo.txt之后,我尝试了常用的 stdout 重定向,例如set -v,但只有 ls 的输出被重定向。

PS:我想要的是有一个函数(称之为“save_succ_cmdline()”),我可以放在一个(复杂的)命令行(例如save_succ_cmdline grep -m1 "model name" /proc/cpuinfo | sed 's/.*://' | cut -d" " -f -3)之前这样,如果成功,该函数将保存给定的命令行。

请注意,上面的grep -m1 "model name" ...示例仅用于给出一个带有特殊字符(|,',“)的命令行示例。我对此类函数”save_succ_cmdline()“的期望是执行实际命令(在函数名称grep -m1 "model name"...之后)并且函数验证退出代码([$? == 0])以确定命令行是否可以保存。如果实际命令成功,函数(“save_succ_cmdline”)可以保存命令行表达式(使用管道和其他所有内容)。

我的目的是使用bash -o verbose功能来拥有和(暂时)保存命令行。但我无法做到这一点。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您的save_succ_cmdline函数只会看到命令行的grep -m1 "model name" /proc/cpuinfo部分,因为shell会看到管道本身。

如果你只是想要grep部分,那就说你会做你想做的事。

save_succ_cmdline() {
    "$@" && cmd="$@"
}

如果您想要整个管道,那么您需要将整个参数引用到save_succ_cmdline并在eval上使用"$@"(或类似),我不确定您是否可以这适用于任意引用。