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