3 回答
TA贡献1866条经验 获得超5个赞
set -x或set -o xtrace展开变量并在该行之前打印一点+号。
set -v或set -o verbose在打印之前不展开变量。
使用set +x和set +v关闭以上设置。
在脚本的第一行,一个可以把#!/bin/sh -x(或-v)有同样的效果set -x(或-v)后面的脚本。
以上也适用于/bin/sh。
有关set属性和调试,请参见bash-hackers的Wiki 。
$ cat shl
#!/bin/bash
DIR=/tmp/so
ls $DIR
$ bash -x shl
+ DIR=/tmp/so
+ ls /tmp/so
$
TA贡献1796条经验 获得超7个赞
set -x 会给你你想要的。
这是一个示例shell脚本来演示:
#!/bin/bash
set -x #echo on
ls $PWD
这将展开所有变量并在命令输出之前打印完整命令。
输出:
+ ls /home/user/
file1.txt file2.txt
TA贡献1993条经验 获得超5个赞
我使用一个函数回显然后运行命令
#!/bin/bash
#function to display commands
exe() { echo "\$ $@" ; "$@" ; }
exe echo hello world
哪个输出
$ echo hello world
hello world
编辑:
对于更复杂的命令管道等,可以使用eval:
#!/bin/bash
#function to display commands
exe() { echo "\$ ${@/eval/}" ; "$@" ; }
exe eval "echo 'Hello World' | cut -d ' ' -f1"
哪个输出
$ echo 'Hello World' | cut -d ' ' -f1
Hello
- 3 回答
- 0 关注
- 497 浏览
添加回答
举报