回答:
すべての行に読み取りを入力する必要はありません。次のようなトラップをbashスクリプトに追加するだけで、望みどおりの効果が得られます。
#!/usr/bin/env bash
set -x
trap read debug
< YOUR CODE HERE >
動作します。bashv4.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 >
この場合、スクリプトを停止するには、別のシェルからスクリプトを強制終了する必要があります。
代替1
スクリプトの次のコマンドに進む前に数秒だけ待機したい場合は、次の例が役立ちます。
#!/usr/bin/env bash
trap "set +x; sleep 5; set -x" DEBUG
< YOUR CODE HERE >
出力を読みやすくするために、trapコマンド内にset + xおよびset -xを追加しています。
trap 'read -u1' debug
、ファイルの読み取りリダイレクトの問題をオーバーライドします。
たぶん、BASH Debuggerはあなたのためのものです。
apt-get install bashdb
。次にbashdb your_command.sh
、を実行し、と入力してstep
、その後キャリッジリターンを押すだけです。
brew install bashdb
bashスクリプトが実際に1つずつ実行する一連のオフのコマンドである場合は、次のようにして、実行LN
する行番号に対応する変数をインクリメントするときに各コマンドを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
xtraceをステップ実行できます。