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