例如,我有一个简单的bash文件

#!/bin/bash
cd ~/hello
ls


如何在执行每个命令之前将其显示? Windows批处理脚本中的“ @echo off”正好相反。

评论

对于那些寻找设置选项的人,您可以在此手册页上找到它们。

您可以像这样#扩展shebang#!/ bin / bash -x

#1 楼

bash -x script




set -x


在脚本中。

您可以使用set +x再次取消设置该选项。如果只想对几个命令执行操作,则可以使用一个子shell:`(set -x; command1; command; ...;)

评论


我一直以来都用它来产生很大的效果。输出看起来比您最初预期的要脏。

–斯科特包
09年5月31日在13:51

通过设置PS4,您可以调整-x的提示。例如:PS4 ='Line $ LINENO @ $(date +%s。%N):'bash -x脚本(不过日期会降低速度)

–沃尔特·特罗斯(Walter Tross)
2014年11月17日11:15



#2 楼

这些也可以:

set -v




#!/bin/bash -v


但是-v之前不会打印PS4字符串每个脚本行,它不会分别跟踪“ for”语句的步骤(例如)。它会回显注释,而-x不会。

下面是使用-v的输出示例:

#!/bin/bash -v
# this is a comment
for i in {1..4}
do
    echo -n $i
done
1234echo

echo hello
hello


这是与-x相同的脚本:

+ for i in '{1..4}'
+ echo -n 1
1+ for i in '{1..4}'
+ echo -n 2
2+ for i in '{1..4}'
+ echo -n 3
3+ for i in '{1..4}'
+ echo -n 4
4+ echo

+ echo hello
hello


请注意,我加入了“ echo -n”来强调-v和-x之间的区别。另外,-v与“ -o verbose”相同,但是后者似乎不适合作为shebang的一部分。

评论


很好的解释!没有做任何研究,在我看来这两个字母代表Verbose和eXplicit。

– Ape-in​​ago
2009年5月31日15:58

我认为-x更接近eXecute。

–史蒂文·帕克斯(Steven Parkes)
2012年8月25日15:08

#3 楼

这也应该起作用:

#!/bin/bash -x
cd ~/hello
ls


#4 楼

这应该起作用:

set -o verbose #echo on
...
set +o verbose #echo off


#5 楼

set -o xtraceset +o xtrace是您的朋友(比-o verbose更冗长,输出到STDERR,而不是冗长的日志(似乎登录到STDOUT)。 >

#6 楼

有几种方法。

#!/usr/bin/env bash -x

作为shebang行。

在脚本本身中包含set -x将启用该功能,而set +x将禁用
这两种方法也都可以在可移植性更高的sh shell中使用。

如果我没记错的话,perl也有-x选项。

#7 楼



language -x script


语言= python,perl,bash
-x =运算符
脚本=文件名

希望有帮助。

评论


-x与Python中的回显无关

–尤金·潘科夫(Eugene Pankov)
15年5月26日在14:50

#8 楼

#! /bin/bash -x可以满足您的需求。