与shell脚本和echo命令有关的问题: 在shell脚本中:在执行shell命令时回显shell命令
我想做这样的事情:
foo() {
cmd='ls -lt | head'
echo $cmd
eval ${cmd}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了这个:
foo2() {
set -x
ls -lt | head
set +x
}
Run Code Online (Sandbox Code Playgroud)
但这会产生额外的输出
+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
Run Code Online (Sandbox Code Playgroud)
在zsh函数中,还有其他更优雅的方法吗?
我想做这样的事情:
foo() {
cmd='ls -lt | head'
eval -x ${cmd}
}
Run Code Online (Sandbox Code Playgroud)
并仅回显正在运行的cmd(也许使用别名扩展)。
setopt verbose
将其放在要在运行时开始回显命令的位置,如果不希望出现这种情况,请使用
unsetopt verbose
PS:我意识到这个话题太老了,无法回答最初的提问者,但希望将来能帮助遇到此问题的任何人。
这对我有用。我定义了这个 zsh 函数:
echoRun() {
echo "> $1"
eval $1
}
Run Code Online (Sandbox Code Playgroud)
然后我在这样的函数内运行命令:
foo() {
echoRun "ls -lt | head"
}
Run Code Online (Sandbox Code Playgroud)
还有更好的选择吗?