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

그런 다음 충돌이 발생하면 로그 파일에서 무슨 일이 일어났는지 확인할 수 있습니다(시스템이 출력 버퍼를 플러시할 시간이 있었다면).

관련 정보