私はbashを使ってforループとwileループを含む複雑なスクリプトを実行しています。次のコマンドを使用してスクリプトで履歴を有効にします。
set -o history -o histexpand
しかし、次のスクリプトを実行すると:
#!/bin/bash
set -o history -o histexpand
for i in 1 2 3 4 5
do
echo "Welcome $i times"
done
history
Historyがforループ内のコマンドを追跡しないことがわかります。
[scripts]$ ~/test2.sh
Welcome 1 times
Welcome 2 times
Welcome 3 times
Welcome 4 times
Welcome 5 times
1 for i in 1 2 3 4 5; do echo "Welcome $i times"; done
2 history
forループ内でコマンドを追跡する方法もありますか?この例では、次のような結果が必要です。
[scripts]$ ~/test2.sh
Welcome 1 times
Welcome 2 times
Welcome 3 times
Welcome 4 times
Welcome 5 times
1 for i in 1 2 3 4 5; do echo "Welcome $i times"; done
2 echo "Welcome $i times"
3 echo "Welcome $i times"
4 echo "Welcome $i times"
5 echo "Welcome $i times"
6 echo "Welcome $i times"
7 history
ベストアンサー1
「履歴」は、「以前に入力した」コマンドの履歴です。
GNUから手動:
「set組み込みコマンドの-o Historyオプションが有効になっている場合...シェルはコマンド履歴、つまり以前に入力したコマンドのリストへのアクセスを提供します。」
したがって、シェル変数を置き換えたり、ループ反復を保存したりすることはありません。
これを行うには、スクリプトを呼び出してbashデバッグを使用できます。
bash -x myscript > to-my-log-file
その後、競合が発生した場合は、ログファイルで何が起こったかを確認できます(システムが出力バッファをフラッシュする時間があった場合)。