it-swarm.cn

如何使bash脚本在执行每个命令之前将其打印出来?

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

#!/bin/bash
cd ~/hello
ls

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

90
Epeius
bash -x script

要么

set -x

在脚本中。

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

114
Steven Parkes

这些也可以:

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的一部分。

23

这也应该起作用:

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

这应该工作:

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

set -o xtraceset +o xtrace是您的朋友(比-o verbose更为冗长,输出到STDERR,而不是冗长的日志显示到STDOUT)。

查看更多提示 这里

4
pihentagy

有几种方法。

#!/usr/bin/env bash -x

作为社bang线。

在脚本本身中包含set -x将启用该功能,而set +x将禁用该功能。这两种方法都将与更便携的sh Shell一起使用。

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

3
user6784

language -x script

语言= python,Perl,bash -x =操作员脚本=文件名

希望能帮助到你。

1
debuggerpk

#! /bin/bash -x做您想要的。

0
Rory