![쉘 스크립트(sysprep)에서 Bash 기록을 완전히 지웁니다.](https://linux55.com/image/165194/%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8(sysprep)%EC%97%90%EC%84%9C%20Bash%20%EA%B8%B0%EB%A1%9D%EC%9D%84%20%EC%99%84%EC%A0%84%ED%9E%88%20%EC%A7%80%EC%9B%81%EB%8B%88%EB%8B%A4..png)
저는 머신을 식별 해제하고 템플릿 작성을 준비하는 sysprep 스타일 스크립트를 개발 중입니다. 종료하기 전에 수행하고 싶은 마지막 작업은 루트 사용자의 bash 기록을 지우는 것입니다. 나는 실행할 수 있다
HISTFILE=~/.bash_history
set -o history
>$HISTFILE
history -c
스크립트 내에서. 문제는 스크립트를 실행하는 대화형 루트 세션에 대해 메모리에 저장된 기록이 해당 세션이 끝날 때 $HISTFILE에 기록된다는 것입니다. sysprep 스크립트가 마지막으로 실행되기를 원합니다(스크립트의 마지막 줄은 입니다 shutdown now -h
).
필요한 경우 닫기 전에 대화형 세션에서 기록을 수동으로 지울 수 있지만 이 작업을 스크립트의 일부로 수행하고 싶습니다. 어떤 제안이 있으십니까?
이것이 중요한지는 확실하지 않지만 RHEL8에서는 작동합니다.
답변1
내가 생각할 수 있는 가장 가까운 것은 다음과 같습니다.
시스템 준비 도구
#!/bin/sh
# other steps
cp /dev/null ~/.bash_history
shutdown -h now
다음은:
# exec /path/to/sysprep.sh
....을 호출하는 대신 현재 쉘을 쉘 스크립트로 /path/to/sysprep.sh
대체합니다 exec
. 이를 통해 현재 쉘이 기록을 작성하고 종료할 수 있습니다. 그러면 sysprep 스크립트가 기록 파일을 자유롭게 삭제(또는 지울) 수 있습니다.
답변2
$HISTFILE
쉘이 종료되면 현재 쉘의 기록이 추가됩니다. 이런 일은 unset $HIST_FILE
발생하지 않으므로 셸이 종료되면 해당 셸 인스턴스의 기록이 손실됩니다.
그래서 그냥:
- 스크립트는 대화형 셸에서 얻거나 실행되거나 대화형 셸 없이 직접 호출됩니다.
- 스크립트는 종료하기 전에 $HISTFILE 설정을 해제합니다.
기록 파일을 삭제하거나 나중에 보려는 기록으로 바꿀 수 있습니다.