
내 스크립트의 마지막 명령으로 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 )
약간 관련됨: 다음 중 일부를 사용하는 도구(깨끗한 환경의 임시 작업 디렉터리에 대화형 셸을 생성하고 셸이 종료될 때 정리됨):
면책 조항 : 나는 그것을 썼습니다.