シェルスクリプト(sysprep)からBashの履歴を完全に消去します。

シェルスクリプト(sysprep)からBashの履歴を完全に消去します。

私はマシンの識別を解除し、テンプレートの作成を準備する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発生しないため、シェルが終了すると、そのシェルインスタンスの履歴が失われます。

だから:

  1. スクリプトは、対話型シェルから取得または実行されるか、または対話型シェルなしで直接呼び出されます。
  2. スクリプトは終了する前に$ HISTFILE設定をオフにします。

履歴ファイルを削除したり、後で表示したい履歴に置き換えることができます。

関連情報