Bashループ内の履歴

Bashループ内の履歴

私は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

その後、競合が発生した場合は、ログファイルで何が起こったかを確認できます(システムが出力バッファをフラッシュする時間があった場合)。

おすすめ記事