私は20行ほどのスクリプトを作成していますが、1行ずつコピーして貼り付けて実行しながらテストを続けている自分を発見するようになりました。
Enter各行をコピーして貼り付けて[実行]をタップしたくありません。コピーして貼り付けるスクリプト全体を一度に実行する必要はありません(ブロックまたはここのドキュメント)、しかしファッションのようなクエリは次のとおりです。
getの最初の行は定期的に(無条件に)実行され、(出力を考慮するのに十分な時間が経過した後)、次の行を実行し続けるかどうかを尋ねられます。
続行することを選択すると、そのまま残ります。それ以外の場合、ジョブは中断されます。
(もちろん、これまでの結果はロールバックされませんが、少なくともそれ以上の疑わしい結果は生成されません。)
このパターンは、スクリプトが終了するまで1行ずつ繰り返す必要があります。
この方法で作業するのに役立つユーティリティはありますか?
答え1
使用できるバッシュデバッガスクリプトをデバッグします。
より簡単なオプションは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
。関数の内部でリセットされない限り、内部関数をトリガーしません。したがって、関数自体を含め、デバッグしたくない関数をスキップできますが、次のことを覚えておく必要がありますprompt
。trap
関数は内部で実行されます)するデバッグしたい)
トレース動作は、次のように追加することで、スクリプト内で自由に有効または無効にできます。
trap prompt DEBUG
そして
trap "" DEBUG
適切です。