在shell脚本中:echo shell命令执行时

在shell脚本中,我如何回显所有调用的shell命令并展开所有变量名称? 例如,给出以下行:

ls $DIRNAME

我希望脚本运行该命令并显示以下内容

ls /full/path/to/some/dir

目的是保存所有调用的shell命令及其参数的日志。 也许有更好的方法来生成这样的日志?


set -xset -o xtrace扩展变量并在行之前打印一点+符号。

set -vset -o verbose在打印之前不会展开变量。

使用set +xset +v关闭上述设置。

在脚本的第一行中,可以在脚本中稍后将#!/bin/sh -x (或-v )与set -x (或-vset -x为相同的效果。

以上也适用于/bin/sh

http://www.faqs.org/docs/abs/HTML/options.html

$ cat shl
#!/bin/bash                                                                     

DIR=/tmp/so
ls $DIR

$ bash -x shl 
+ DIR=/tmp/so
+ ls /tmp/so
$

set -x会给你你想要的。

以下是一个示例shell脚本示例:

#!/bin/bash
set -x #echo on

ls $PWD

这将扩展所有变量并在输出命令之前打印完整命令。

输出:

+ ls /home/user/
file1.txt file2.txt

你也可以在你的脚本中通过将它们包装在set -xset +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
链接地址: http://www.djcxy.com/p/2891.html

上一篇: In a shell script: echo shell commands as they are executed

下一篇: How to mkdir only if a dir does not already exist?