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