macOS/BSD 유사 운영 체제의 스크립트에서 실제 셸을 대체하는 더 좋은 방법이 있습니까?

macOS/BSD 유사 운영 체제의 스크립트에서 실제 셸을 대체하는 더 좋은 방법이 있습니까?

저는 macOS를 사용하고 있습니다. .bashzshshbashshbash​ 단순히 시작 부분 zsh에 넣는 것만으로는 작동하지 않으며 실행 가능 비트가 설정되지 않습니다. #!/bin/zsh나는 내 스크립트에서 이것을 생각해 냈습니다.

shell=`ps -p $$ -oargs=|cut -d " " -f1`
if test `basename $shell` != 'zsh'
then
    echo "Replacing shell with zsh"
    exec /bin/zsh $0 $@
fi

echo "ECHO $1 $2"

이것은 작동합니다:

% bash test.sh aap noot
Replacing shell with zsh
ECHO aap noot
% zsh test.sh aap noot
ECHO aap noot

스크립트가 호출되는 셸에 관계없이 zsh를 사용하여 스크립트를 실행하도록 강제하는 더 나은/더 강력하고/더 우아한 솔루션이 있는지 궁금합니다.

답변1

당신은 기반을 구축할 수 있습니다ZSH_버전

#! /bin/zsh -
if [ -z "${ZSH_VERSION:-}" ]; then
  exec zsh - "$0" "$@"
fi

관련 정보