.shスクリプトから新しいbashシェルを作成する

.shスクリプトから新しいbashシェルを作成する

スクリプトの最後のコマンドで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指示し、親シェルを終了します。ユーザーが 。HUPdecrypt.shencrypt.sh


HISTFILE設定または/dev/null試みる代わりに未設定作成した対話型シェルでこれをHOME一時ディレクトリに設定するだけです。履歴ファイルはそのディレクトリに作成され、$HOME終了時にそのディレクトリと共に削除されます。decrypt.sh

( cd "$tmpdir" && HOME="$tmpdir" bash )

cdこれは、引数とこの変数を使用できるHOME他のすべてだけでなく、チルダ拡張の動作にも影響します。

侵害の少ないバリエーションは、変数を一時HISTFILEディレクトリのファイル名に明示的に設定することです。

( cd "$tmpdir" && HISTFILE="$tmpdir/.bash_history" bash )

少し関連している:これらの項目の一部を使用するツール(クリーンな環境の一時作業ディレクトリに対話型シェルを作成し、シェルがシャットダウンしたときにクリーンアップ):

免責事項:私はそれを書いた。

おすすめ記事