【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
在shell脚本中,如何回显所有被调用的shell命令并扩展任何变量名?
例如,给出以下行:
ls $DIRNAME
我希望脚本运行命令并显示以下内容
ls /full/path/to/some/dir
目的是保存所有调用的shell命令及其参数的日志。 也许有更好的方法来生成这样的日志?
#1楼
您还可以通过将它们包装在set -x和set +x中来切换脚本中的选择行,例如,
#!/bin/bash
...
if [[ ! -e $OUT_FILE ]];
then
echo "grabbing $URL"
set -x
curl --fail --noproxy $SERV -s -S $URL -o $OUT_FILE
set +x
fi
#2楼
另一个选择是在脚本的顶部而不是在命令行的顶部放置“ -x”:
$ cat ./server
#!/bin/bash -x
ssh user@server
$ ./server
+ ssh user@server
user@server's password: ^C
$
#3楼
对于zsh,回显
setopt VERBOSE
对于调试,
setopt XTRACE
#4楼
shuckc回显选择行的答案有一些缺点:您最终还会回显以下set +x命令,并且您失去了使用$?测试退出代码的能力$? 因为它被set +x覆盖。
另一种选择是在子shell中运行命令:
echo "getting URL..."
( set -x ; curl -s --fail $URL -o $OUTFILE )
if [ $? -eq 0 ] ; then
echo "curl failed"
exit 1
fi
这将为您提供如下输出:
getting URL...
+ curl -s --fail http://example.com/missing -o /tmp/example
curl failed
但是,这确实会增加为命令创建新的子shell的开销。
#5楼
在Bash脚本名称之前的命令行上键入“ bash -x”。 例如,要执行foo.sh,请输入:
bash -x foo.sh
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3144603