如何在执行命令之前打印命令?

时间:2017-01-26 15:24:37

标签: bash unix ksh

我需要运行一些如下所述的命令,它应该在执行之前显示在屏幕上然后输出命令

lsuser -f root|grep -i maxage|awk -F= '{print$2}'

返回13。

我尝试将命令存储在变量中,如下所示,但它没有工作。

mxage="lsuser -f root|grep -i maxage|awk -F= '{print$2}'"
echo "$maxage"
echo "`$maxage`"

输出应该是:

lsuser -f root|grep -i maxage|awk -F= '{print$2}' 13

2 个答案:

答案 0 :(得分:0)

首先,我建议只使用set -x,它会在执行命令之前将命令记录到标准错误。完成set +x后,您可以禁用此功能。

set -x 
lsuser -f root|grep -i maxage|awk -F= '{print$2}'
set +x

缺点:

  1. 数据写入标准错误,而不是标准输出。 (但在较新版本的bash中,您可以通过设置BASH_XTRACEFD来指定任意文件描述符。)
  2. 跟踪set +x的执行情况。
  3. 如果您仔细设置变量非常的值,则可以使用eval

    cmd="lsuser -f root|grep -i maxage|awk -F= '{print\$2}'"
    echo "$cmd"
    eval "$cmd"
    

    但是,我不推荐这种方法。从理论上讲,它可以正确设置cmd的值,以便它准确记录并按预期正确执行,但我发现它比它的价值更麻烦。 (但是,我等待有人展示如何轻松完成;我知道它涉及printf%q说明符。)

答案 1 :(得分:0)

set -x适用于调试脚本。如果您只想查看原始命令,请使用

set -v
lsuser -f root|grep -i maxage|awk -F= '{print$2}'
set +v