나는 내가 기여하는 여러 라이브러리를 테스트하기 위해 다양한 컴퓨터에 계정을 가지고 있습니다. 일부 머신은 다른 사람(예: GCC 컴파일 팜)의 소유이므로 깨끗하게 유지하고 싶습니다.
다음을 .bash_logout
수행하는 스크립트를 설정하고 싶습니다make clean
exit
만약에나는 특정 디렉토리에 있습니다. 디렉터리에서는 여러 SSH 세션을 종료해야 합니다. 한 세션에서 빌드/테스트하는 경우 아티팩트를 정리하기 위해 별도의 세션 로그아웃을 원하지 않습니다. 즉, 실행 exit
이 취소 $HOME/libfoo
되고 exit
절대로 $HOME
.
기본 사항은 이해하지만 그것이 얼마나 강력한지는 확실하지 않습니다.
# $HOME/.bash_logout
if [ "$PWD" = "$HOME/libfoo" ]; then
make clean 1>/dev/null 2>&1
fi
$PWD
로그아웃 시 사용에 문제는 없나요? 제가 놓친 다른 질문이 있나요?
답변1
로그아웃 시에만 스크립트를 실행하시겠습니까?
남자 배쉬에서 :
로그인 쉘이 종료되면 bash는 ~/.bash_logout 파일(존재하는 경우)에서 명령을 읽고 실행합니다.
bash 로그인 쉘을 종료할 때만 해당됩니다.
쉘이 닫힐 때마다 스크립트를 실행하려면 트랩을 사용하십시오(man bash 참조).
trap /u1/myuser/on_exit_script.sh EXIT
이것을 .bashrc 또는 귀하에게 적합한 다른 파일에 추가하십시오.
또한 스크립트는 종료 시 실행되므로 $PWD는 종료 시 활성화되는 스크립트가 되며 이는 쉘이 시작될 때와 동일할 수도 있고 그렇지 않을 수도 있습니다. 종료 시 사용된 $PWD로 무언가를 수행해야 하는 경우 그렇습니다. 이 테스트는 다음과 같습니다.
if [ "$PWD" = "$HOME/libfoo" ]; then
작동해야합니다.
답변2
나는 많은 쉘 스크립트가 이식 가능하고 쉘에 구애받지 않는 것을 좋아하므로 bash 특정 .bash_logout 방법을 사용하는 대신 EXIT를 잡는 것을 선호합니다. 진정한 독립형 솔루션의 경우 .bash_logout을 수정하거나 생성할 필요가 없거나 종료 시 실행되는 별도의 스크립트를 사용하는 것이 더 좋습니다. 물론 더 나쁜 것은 "exit" 명령 자체가 시스템에서 수행하는 작업을 수정하거나 재정의하는 것입니다. 이 솔루션은 다른 누구에게도 영향을 주어서는 안 됩니다!
따라서 외부 시스템에 대한 영향을 최소화하기 위해 제가 선호하는 접근 방식은 시스템 작업을 시작할 때마다 사용자 정의 로그인 프로필을 배치하고 동일한 프로필이 자체적으로 정리되고 도우미 스크립트나 구성 파일이 생성되는 모든 것이 정리되도록 하는 것입니다. 그런 다음 해당 구성 파일을 가져오고(ksh에서도 작동하는 "." 사용) 모든 별칭 등을 설정합니다. 하지만 작업이 완료된 후에도 계속 유지되는 것을 원하지 않습니다.
그래서 위의 정리를 수행하기 위해 스크립트 자체에 "bye" 셸 함수를 만들고 의도적으로 또는 단순히 연결을 끊는 방식으로 로그아웃 시 자동 정리를 위해 등록했습니다.
trap bye EXIT
이렇게 하면 내 작업에 추악한 흔적이 남지 않습니다. 어떤 특정 정리를 수행해야 하는지는 사용자에게 달려 있습니다. 디렉토리별 "make clean"은 많은 가능성 중 하나일 뿐입니다. 어떤 방법으로든 로그아웃하면 프로필의 모든 흔적(깨끗한 기능도 포함)이 사라집니다.
한 단계 더 나아갈 수 있습니다. 다양한 유형의 시스템에서 다양한 유형의 정리를 원할 수도 있고, 일부 시스템에서는 이러한 정리를 전혀 원하지 않을 수도 있습니다. 스위치를 "bye" 셸 함수로 만들거나 다른 "bye1", "bye2"를 만들고 일부 테스트(예: 특정 파일의 존재 여부)를 기반으로 필요한 스위치를 등록할 수 있습니다. 이것이 동일한 프로필을 유지하려는 장기 시스템에서 내 사용자 정의 프로필이 삭제되는 것을 방지하는 방법입니다.
답변3
bash_logout을 통해 이 작업을 수행하는 방법을 모르겠습니다. exit라는 작은 스크립트를 작성하여 /usr/local/bin/에 넣고 다음과 같이 질문에 넣은 코드 유형을 사용할 수 있습니다. 콘솔에서는 특정 디렉터리에 있는 경우 원하는 작업을 수행합니다.