bash -xオプションを入力すると、すべての行が表示されます。しかし、スクリプトは正常に実行されます。どのように行ごとにbashスクリプトを実行しますか?
行ごとにどのように実行できますか?私はそれが正しいことをするかどうかを見ることができます、または私はバグを中止し、修正します。同じ効果がすべての行にread
と置かれます。
bash -xオプションを入力すると、すべての行が表示されます。しかし、スクリプトは正常に実行されます。どのように行ごとにbashスクリプトを実行しますか?
行ごとにどのように実行できますか?私はそれが正しいことをするかどうかを見ることができます、または私はバグを中止し、修正します。同じ効果がすべての行にread
と置かれます。
everylineで読み込みをする必要はありません。次のようなトラップをbashスクリプトに追加するだけで、必要な効果が得られます。
#!/usr/bin/env bash
set -x
trap read debug
< YOUR CODE HERE >
bash v4.2.8およびv3.2.25で動作確認済みです。
改良版
スクリプトファイルからコンテンツを読んでいる場合は、上記では動作しません。回避策は次の例のようになります。
#!/usr/bin/env bash
echo "Press CTRL+C to proceed."
trap "pkill -f 'sleep 1h'" INT
trap "set +x ; sleep 1h ; set -x" DEBUG
< YOUR CODE HERE >
あなたはこの場合、別のシェルからそれを殺すために必要がありますスクリプトを停止します。
あなたは、単にあなたのために働く可能性があり、スクリプトで次のコマンドに次の例を進める前に、数秒を待ちたい場合ALTERNATIVE1。
#!/usr/bin/env bash
trap "set +x; sleep 5; set -x" DEBUG
< YOUR CODE HERE >
出力をより読みやすくするために、トラップコマンドにset + xと-xを追加します。
次に、次の行に進む(次のコマンドを実行する)のですか? –
すべてのコマンドで読み取りをトラップします。あなたがする必要があるのは、次のコマンドに戻るためにreturnキーを押すことだけです。 –
別のシェルを使用したい場合は、kshでも動作します。 – ChrisGer
多分BASH Debuggerはあなたのためのものです。
bash-stepping-xtraceをご覧ください。
ステッピングxtraceが可能です。
bashスクリプトが実際に1つずつ実行したいオフコマンドの束である場合、あなたは変数をインクリメントするときに各コマンドを1つずつ実行するこのようなことを行うことができますあなたが走りたい番号。これにより、最後のコマンドを再び簡単に実行することができます。次に、次のコマンドに進むために変数をインクリメントします。
あなたのコマンドが "it.sh"というファイルであると仮定して、次のコマンドを1つずつ実行します。
$ cat it.sh
echo "hi there"
date
ls -la /etc/passwd
$ $(LN=1 && cat it.sh | head -n$LN | tail -n1)
"hi there"
$ $(LN=2 && cat it.sh | head -n$LN | tail -n1)
Wed Feb 28 10:58:52 AST 2018
$ $(LN=3 && cat it.sh | head -n$LN | tail -n1)
-rw-r--r-- 1 root wheel 6774 Oct 2 21:29 /etc/passwd
おそらく、より広くも参照https://stackoverflow.com/questions/951336/how-to-debug-a-bash-script/45096876#45096876 – tripleee