例如,我有一个简单的bash文件
#!/bin/bash cd ~/hello ls
在执行它之前,我怎样才能让它显示每一个命令? 只是在Windows批处理脚本中的“@echo off”的相反效果。
bash -x script
要么
set -x
在脚本中。
您可以使用set +x
再次取消选项。 如果你只是想做几个命令,你可以使用一个子shell:`(set -x; command1; command; …;)
这些也工作:
set -v
要么
#!/bin/bash -v
但-v不会在每个脚本行之前打印PS4string,并且不会单独跟踪“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
请注意,我join了“echo -n”来强调-v和-x之间的区别。 另外,-v和“-o verbose”是一样的,但是后者似乎不能作为shebang的一部分。
这也应该工作:
#!/bin/bash -x cd ~/hello ls
这应该工作:
set -o verbose #echo on ... set +o verbose #echo off
set -o xtrace
和set +o xtrace
是你的朋友(它比-o verbose
更详细,输出到STDERR,而不是verbose,这似乎logging到STDOUT)。
在这里查看更多提示
有几种方法。
#!/usr/bin/env bash -x
作为shebang线。
在脚本中包含set -x
将启用该function,而set +x
将禁用该function。 这两种方法也将使用更便携的sh shell。
如果我没有记错perl也有-x选项。
喜欢
language -x script
language = python,perl,bash -x =运算符脚本=文件名
希望它有帮助。
#! /bin/bash -x
#! /bin/bash -x
做你想要的。