Shebang 라인 "$SHELL로 실행"

Shebang 라인 "$SHELL로 실행"

my_zsh_script.sh"셔뱅라인"에 바르면 같은 효과를 얻을 수 있는 것을 찾고 있는데 ,가지고 다닐 수 있는, 처럼

$SHELL my_zsh_script.sh

IOW, 유효한 이에 상응하는 항목을 찾고 있습니다.

#!$SHELL

또는

#!/usr/bin/env $SHELL    

(일부 시스템에서는 내 값이 $SHELLversion 이고 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

관련 정보