![macOS/BSD 유사 운영 체제의 스크립트에서 실제 셸을 대체하는 더 좋은 방법이 있습니까?](https://linux55.com/image/222858/macOS%2FBSD%20%EC%9C%A0%EC%82%AC%20%EC%9A%B4%EC%98%81%20%EC%B2%B4%EC%A0%9C%EC%9D%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EC%8B%A4%EC%A0%9C%20%EC%85%B8%EC%9D%84%20%EB%8C%80%EC%B2%B4%ED%95%98%EB%8A%94%20%EB%8D%94%20%EC%A2%8B%EC%9D%80%20%EB%B0%A9%EB%B2%95%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
저는 macOS를 사용하고 있습니다. .bash
zsh
sh
bash
sh
bash
단순히 시작 부분 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