
スクリプトの最後のコマンドでdecrypt.sh
新しく作成されたフォルダに拡張子unset HISTFILE
。
この時点で、ユーザーは新しいシェルと対話できる必要があります。
encrypt.sh
このフォルダには、ユーザーが実行できるスクリプトが含まれています。最後の操作でフォルダを削除し、このシェルを終了してユーザーを元のシェルに戻す必要があります。
どうすればいいですか?
bashソリューションは私にはうまくいきましたが、通常のソリューションは他の人にも効果があるかもしれません(しかしそうではないかもしれません)。
答え1
スクリプトdecrypt.sh
:
#!/bin/bash
# Create working directory.
tmpdir=$(mktemp -d)
# Remove the temporary directory upon exiting
trap 'rm -r "$tmpdir"' EXIT
# Copy "encrypt.sh" from somewhere.
cp /somewhere/encrypt.sh "$tmpdir"
# Start an interactive shell in the directory with
# HISTFILE set to /dev/null
( cd "$tmpdir" && HISTFILE=/dev/null bash )
スクリプトencrypt.sh
:
#!/bin/bash
# When exiting, terminate the parent shell
trap 'kill -s HUP "$PPID"' EXIT
# rest of script goes here
このdecrypt.sh
スクリプトは、作業ディレクトリの設定と削除を担当します。ディレクトリ設定には、ディレクトリを作成し(mktemp -d
一時ディレクトリを作成するため)、元のディレクトリがencrypt.sh
ある場所にスクリプトをコピーすることが含まれます。作業ディレクトリは、スクリプトが終了すると削除されますdecrypt.sh
。
スクリプト自体が終了したら、スクリプトに作業ディレクトリを削除するようにencrypt.sh
指示し、親シェルを終了します。ユーザーが 。HUP
decrypt.sh
encrypt.sh
HISTFILE
設定または/dev/null
試みる代わりに未設定作成した対話型シェルでこれをHOME
一時ディレクトリに設定するだけです。履歴ファイルはそのディレクトリに作成され、$HOME
終了時にそのディレクトリと共に削除されます。decrypt.sh
( cd "$tmpdir" && HOME="$tmpdir" bash )
cd
これは、引数とこの変数を使用できるHOME
他のすべてだけでなく、チルダ拡張の動作にも影響します。
侵害の少ないバリエーションは、変数を一時HISTFILE
ディレクトリのファイル名に明示的に設定することです。
( cd "$tmpdir" && HISTFILE="$tmpdir/.bash_history" bash )
少し関連している:これらの項目の一部を使用するツール(クリーンな環境の一時作業ディレクトリに対話型シェルを作成し、シェルがシャットダウンしたときにクリーンアップ):
免責事項:私はそれを書いた。