사용자 정의 명령을 사용하여 특정 도구에 대한 환경을 설정할 수 있는 구현이 있습니다.
예: custom_command 도구_이름
이 명령은 통화 시간, 사용자 및 도구 이름을 로그 파일에 기록합니다.
이러한 로그를 통해 특정 도구가 마지막으로 사용된 시기를 확인할 수 있습니다.
이제 사용자는 로그인 프로필에 명령을 입력하는 데 익숙합니다.
그렇다면 명령줄이나 다른 스크립트에서 수동으로 입력하여 comamnd가 호출되고 있는지 확인할 수 있습니까? 그렇다면 스크립트 이름은 무엇입니까?
여러 가지 방법을 시도해 봤습니다. 내가 찾을 수 있는 것은 쉘이라는 상위 스크립트 이름뿐입니다.
내 이해는 이것이 불가능하다는 것입니다. 하지만 나는 단지 내 행운을 시험해보고 싶었습니다.
답변1
bash
스크립트 에서는 보통 다음과 같이 합니다.
#!/bin/bash
if test "$0" != "$BASH_SOURCE"; then
SOURCED=1
MY_NAME=$BASH_SOURCE
else
SOURCED=0
MY_NAME=$0
fi
# do something here
if test "$SOURCED" = "1"; then
# use return instead of exit
return
fi
# do something here only when not sourced
exit
답변2
나는 이것이 완전히 가능하다고 생각하지 않습니다.
물론 상위 프로세스가 무엇인지, 해당 명령줄 인수가 무엇인지 알 수 있지만 궁극적으로 대화형 셸을 실행할 때 시작 스크립트에서 실행되는 프로그램의 상위 프로세스는 대화형으로 실행되는 프로그램과 동일합니다.
실행된 위치에만 있는 경우 .profile
소스가 이후에 있다는 사실로 이를 감지할 수 있습니다 /etc/bashrc
(이 셸에서 실행 무시를 중지하는 명령을 입력할 수 있기 때문입니다).
또 다른 접근 방식은 상위 프로세스의 시작 시간을 확인하는 것입니다. 일반적으로 명령의 대화형 실행은 셸이 시작된 직후에 실행되고, init 스크립트는 셸이 시작된 직후에 실행됩니다.
더 정교한 아이디어는 이를 보다 사용자 정의된 방식으로 시작 파일의 출처를 제어하는 래퍼로 바꾸는 것입니다 /bin/bash
(이 아이디어는 첫 번째 아이디어와 유사하지만 명령이 실행됩니다)뒤쪽에 .bashrc
). 이것이 좋은 생각인지는 모르겠지만 적어도 이 작업을 수행할 때는 매우 조심해야 합니다.