У меня есть следующий код в файле, который поставляется как zsh, так и bash.
if test $SHELLNAME = zsh ; then
lss() { l -l ${1:-.}/*(s,S,t); }
laf() { l ${1:-.}/.*(.); }
lad() { l -d ${1:-.}/.*(/); }
lsw() { l -ld ${1:-.}/.*(R,W,X.^ND/); }
fi
SHELLNAME
это zsh
если оболочка zsh и bash
если оболочка bash.
Каждая из вышеперечисленных функций содержит код, который работает с zsh, но не bash.
Когда я получаю этот файл, я получаю следующие ошибки.
bash: <filename>: line 67: syntax error near unexpected token `('
bash: <filename>: line 67: ` lss() { l -l ${1:-.}/*(s,S,t); }'
На данный момент я использую, eval
чтобы обойти проверку синтаксиса bash.
if test $SHELLNAME = zsh ; then
# Using eval makes sure bash can't try to syntax-check these functions.
eval 'lss() { l -l ${1:-.}/*(s,S,t); }'
eval 'laf() { l ${1:-.}/.*(.); }'
eval 'lad() { l -d ${1:-.}/.*(/); }'
eval 'lsw() { l -ld ${1:-.}/.*(R,W,X.^ND/); }'
fi
Есть ли лучшее решение этой проблемы? (возможно тот, который не использует eval
)
Вместо того, чтобы пытаться заставить Bash не проверять синтаксис, почему бы не получить ваш скрипт, который получает источник этого единственного источника, когда он вызывается правильной оболочкой.
источник