私はマシンの識別を解除し、テンプレートの作成を準備するsysprepスタイルのスクリプトを開発しています。終了する前に実行したい最後の作業は、rootユーザーの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設定をオフにします。
履歴ファイルを削除したり、後で表示したい履歴に置き換えることができます。