約20行のスクリプトを作成し、1行ずつコピーして貼り付けて実行することで何度もテストしています。
各行をコピーして貼り付けてヒットする代わりに Enter 実行するには、スクリプト全体を(1つのブロックまたは heredocument として実行せずに、スクリプト全体をcopy-pasteしたい=)、しかしむしろファッションのようなクエリで;例えば:
最初の行は定期的に(無条件に)実行され、次の行の実行を続行したい場合は(出力を検討するのに十分な時間を置いた後)照会されます。
私が続行することを選択した場合-そうであっても、そうでない場合、操作は中断します。
(これまでの結果はもちろんロールバックされませんが、少なくとも問題のある結果が出続けることはありません)。
このパターンは、スクリプトが終了するまで、1行ずつ繰り返す必要があります。
この方法で作業するのに役立つユーティリティはありますか?
Bashデバッガー を使用して、スクリプトをデバッグできます。
より簡単なオプションは、DEBUG
トラップを使用することです。
#!/bin/bash
function Prompt {
if [[ -n "$BASH_COMMAND" ]]; then
echo About to run \'$BASH_COMMAND\'
read -p 'Continue [Y/n]?' CONT
if [[ "$CONT" = "n" || "$CONT" = "N" ]]; then
echo Exiting prematurely
exit 1
fi
fi
}
trap Prompt DEBUG
echo Hello
ls
sleep 10
トラップが設定されると、すべてのコマンドの前にPrompt
関数が実行され、続行するか中止するかを選択できます。 echo Hello
で始まる行は、スクリプトが何であるかによって置き換えられますが、関数とtrap
コマンドを、source
を内部に配置する別のスクリプトレットに保存することもできます。デバッグするスクリプト。
DEBUG
トラップに関連する微妙な点がいくつかあります。 1つは、関数内で再設定されない限り、関数内でトリガーされません(そのため、Prompt
関数自体を含め、デバッグしたくない関数をスキップできますが、デバッグする関数do内でtrap
を実行することを忘れないでください。
トレース動作は、次のように追加することで、スクリプトで自由に有効または無効にできます。
trap Prompt DEBUG
そして
trap "" DEBUG
適切に。