在问题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
功能来拥有和(暂时)保存命令行。但我无法做到这一点。
提前致谢。
答案 0 :(得分:0)
您的save_succ_cmdline
函数只会看到命令行的grep -m1 "model name" /proc/cpuinfo
部分,因为shell会看到管道本身。
如果你只是想要grep部分,那就说你会做你想做的事。
save_succ_cmdline() {
"$@" && cmd="$@"
}
如果您想要整个管道,那么您需要将整个参数引用到save_succ_cmdline
并在eval
上使用"$@"
(或类似),我不确定您是否可以这适用于任意引用。