macOS / BSDのようなオペレーティングシステムのスクリプトで実際のシェルを置き換えるより良い方法はありますか?

macOS / BSDのようなオペレーティングシステムのスクリプトで実際のシェルを置き換えるより良い方法はありますか?

私はmacOSを使用しています。 . ​​​​​​​​​​​​​​​​​​​​​​​​​​​​単に始めに配置するだけでは機能せず、実行可能ビットは設定されません。私は私のスクリプトでこれを思い出しました。bashzshshbashshbashzsh#!/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

関連情報