#!/bin/bash
cd ~/hello
ls
如何在执行每个命令之前将其显示? Windows批处理脚本中的“ @echo off”正好相反。
#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-inago
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 xtrace
和set +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
可以满足您的需求。
评论
对于那些寻找设置选项的人,您可以在此手册页上找到它们。您可以像这样#扩展shebang#!/ bin / bash -x