我需要运行一些如下所述的命令,它应该在执行之前显示在屏幕上然后输出命令
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
答案 0 :(得分:0)
首先,我建议只使用set -x
,它会在执行命令之前将命令记录到标准错误。完成set +x
后,您可以禁用此功能。
set -x
lsuser -f root|grep -i maxage|awk -F= '{print$2}'
set +x
缺点:
bash
中,您可以通过设置BASH_XTRACEFD
来指定任意文件描述符。)set +x
的执行情况。如果您仔细设置变量非常的值,则可以使用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