有没有更好的方法来替换 macOS/BSD 类操作系统上脚本中的实际 shell?

有没有更好的方法来替换 macOS/BSD 类操作系统上脚本中的实际 shell?

我正在使用 macOS。我有一个 shell 脚本,不能bashzsh.如果我不小心用 with sh(这是 macOS 上一个非常古老的 bash)调用它,或者我希望它即时bash替换shbashwith 。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 运行,而不管它被调用的是什么 shell。

答案1

你可以建立在ZSH_版本

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

相关内容