设置 -x 和通配符扩展



在 shell 脚本中,我们的企业编码标准需要使用...

set -x
command
set +x

。用于日志记录,而不是...

echo "doing command"
command

但是,当通配符是命令的一部分时,这可能会产生非常详细的输出。

例如。。。

for i in {1..10}; do touch $i.foo; done; # create 10 foo files
set -x   # log command execution (stdout to be redirected to log file)
rm *.foo # delete foo files
set +x   # end logging

。产生输出...

rm 10.foo 1.foo 2.foo 3.foo 4.foo 5.foo 6.foo 7.foo 8.foo 9.foo

对于 10 个文件来说还可以,但对于 10,000 个文件来说不是那么好。

所需的输出是...

rm *.foo

我的第一个想法是将 *.foo 放在引号中...

rm "*.foo"

但是,这给出了错误...

rm: cannot remove ‘*.foo’: No such file or directory

有没有办法使用 set -x 在不扩展通配符的情况下回显命令?

在许多情况下,简单的"-x"或"-v"不起作用(根据上面的注释(,并且保持在编码标准范围内(没有单独的回显(,请考虑:

VAR=/tmp/123
$SHELL -cv "ls $VAR/*"

这将执行命令,但会记录命令 WITH 变量替换、命令替换,但没有通配符替换。

最新更新