如何在执行外壳命令时回显它们

在shell脚本中,如何回显所有被调用的shell命令并扩展任何变量名?


例如,给出以下行:


ls $DIRNAME

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


ls /full/path/to/some/dir

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


月关宝盒
浏览 498回答 3
3回答

心有法竹

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/sols $DIR$ bash -x shl + DIR=/tmp/so+ ls /tmp/so$

芜湖不芜

set -x 会给你你想要的。这是一个示例shell脚本来演示:#!/bin/bashset -x #echo onls $PWD这将展开所有变量并在命令输出之前打印完整命令。输出:+ ls /home/user/file1.txt file2.txt

ibeautiful

我使用一个函数回显然后运行命令#!/bin/bash#function to display commandsexe() { echo "\$ $@" ; "$@" ; }exe echo hello world哪个输出$ echo hello worldhello world编辑:对于更复杂的命令管道等,可以使用eval:#!/bin/bash#function to display commandsexe() { echo "\$ ${@/eval/}" ; "$@" ; }exe eval "echo 'Hello World' | cut -d ' ' -f1"哪个输出$  echo 'Hello World' | cut -d ' ' -f1Hello
打开App,查看更多内容
随时随地看视频慕课网APP