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