my_zsh_script.sh
"셔뱅라인"에 바르면 같은 효과를 얻을 수 있는 것을 찾고 있는데 ,가지고 다닐 수 있는, 처럼
$SHELL my_zsh_script.sh
IOW, 유효한 이에 상응하는 항목을 찾고 있습니다.
#!$SHELL
또는
#!/usr/bin/env $SHELL
(일부 시스템에서는 내 값이 $SHELL
version 이고 zsh
어떤 경우에는 #!/usr/bin/env zsh
구문 분석된 값과 다릅니다.)
my_zsh_script.sh
나는 항상 사용자 정의를 정렬 하고 실행하려는 각 호스트에 대해 올바른 Shebang 라인을 하드코딩 할 수 있다고 생각합니다 . 나는 이것을 피할 수 있기를 바랍니다.
답변1
#!/bin/sh
my_script(){
{ cat; cat <&3; }>"$0"
} <<SHEBANG 3<<\SCRIPT
#!${SHELL}
SHEBANG
#now all the rest of your script
#goes in here
SCRIPT
my_script
대부분의 쉘은 이 문서의 전체 내용을 안전한 임시 파일에 자동으로 저장합니다. 파이프를 사용하지 않는 버퍼는 일반적으로 쉘 스크립트 쓰기를 수용할 수 있을 만큼 충분히 크지만, 물론 확실하지는 않습니다.
함수는 쉘 메모리에 저장된 리터럴 문자열입니다. 위의 작업은 한 번만 수행해야 하며 그 후에는 스크립트 $SHELL
를 실행할 때 나오는 모든 내용에 따라 스크립트가 해석됩니다 .
답변2
다음은 일부 특수 환경 변수가 null이 아닌 값으로 설정되어 있는지 확인합니다. 그렇지 않은 경우 스크립트는 를 사용하여 자체적으로 다시 실행되지만 $SHELL
이번에는 특수 변수가 설정된 환경에서 실행됩니다. 특수 변수가 설정되면 스크립트가 예상대로 실행됩니다.
#!/bin/sh
if [ -z "$__run_with_zsh" ]; then
__run_with_zsh=1 exec "$SHELL" "$0" "$@"
fi
# Rest of script here