与shell脚本和echoing命令相关的这个问题: In a shell script: echo shell commands as they are executed
我想做这样的事情:
foo() {
cmd='ls -lt | head'
echo $cmd
eval ${cmd}
}
我试过了:
foo2() {
set -x
ls -lt | head
set +x
}
但是会产生额外的输出
+foo2:2> ls -G -lt
+foo2:2> head
total 136
drwxr-xr-x 18 justin staff 612 Nov 19 10:10 spec
+foo2:3> set +x
在zsh函数中有更优雅的方法吗?
我想做这样的事情:
foo() {
cmd='ls -lt | head'
eval -x ${cmd}
}
只是回显正在运行的cmd(可能是扩展了别名)。
答案 0 :(得分:4)
setopt verbose
将它放在您想要在运行时开始回显命令的任何地方,当您不想要这种行为时,请使用
unsetopt verbose
P.S。我意识到这个帖子太旧了,无法回答最初的提问者,但是希望能帮助那些在将来遇到这个问题的人。
答案 1 :(得分:2)
这对我有用。我定义了这个zsh函数:
echoRun() {
echo "> $1"
eval $1
}
然后我在这样的函数中运行命令:
foo() {
echoRun "ls -lt | head"
}
还有更好的选择吗?