たとえば、私は単純なbashファイルを持っています
#!/bin/bash
cd ~/hello
ls
実行する前にすべてのコマンドを表示するにはどうすればよいですか? Windowsバッチスクリプトでの "@echo off"の反対の効果。
bash -x script
または
set -x
スクリプトで。
set +x
を使用して、オプションを再度設定解除できます。いくつかのコマンドで実行したい場合は、サブシェルを使用できます: `(set -x; command1; command; ...;)
これらも機能します:
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」と同じですが、後者はシバンの一部として機能しないようです。
これも機能するはずです:
#!/bin/bash -x
cd ~/hello
ls
これはうまくいくはずです:
set -o verbose #echo on
...
set +o verbose #echo off
set -o xtrace
とset +o xtrace
は友達です(-o verbose
よりも詳細であり、出力はSTDOUTに記録されるように見える冗長ではなく、STDERRに送られます)。
その他のヒントを見る こちら
いくつかの方法があります。
#!/usr/bin/env bash -x
シバン線として。
スクリプト自体にset -x
を含めると機能が有効になりますが、set +x
は無効になります。これらの方法はどちらも、移植性の高いshシェルでも機能します。
私が正しく覚えている場合、Perlには-xオプションもあります。
のようになります
language -x script
言語= python、Perl、bash -x =オペレータースクリプト=ファイル名
それが役に立てば幸い。
#! /bin/bash -x
はあなたがやりたいことをします。