특정 디렉터리에서 종료하는 경우 로그아웃 스크립트의 코드를 실행하시겠습니까?

특정 디렉터리에서 종료하는 경우 로그아웃 스크립트의 코드를 실행하시겠습니까?

나는 내가 기여하는 몇 가지 라이브러리를 테스트하기 위해 다양한 컴퓨터에 계정을 가지고 있습니다. 일부 머신은 다른 사람(예: GCC 컴파일 팜)의 소유이므로 깔끔하게 유지하고 싶습니다.

다음을 .bash_logout수행하는 스크립트를 설정하고 싶습니다.make cleanexit 만약에나는 특정 디렉토리에 있습니다. 디렉터리 요구 사항은 여러 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을 통해 이를 수행하는 방법을 잘 모르겠지만, 질문에 넣은 종류의 코드를 사용하여 /usr/local/bin/에 넣을 종료라는 작은 스크립트를 작성할 수 있습니다. 콘솔에 exit를 입력하면 특정 디렉토리에 있으면 원하는 대로 작동합니다.

관련 정보