У мене є такий код у файлі, який отримується як 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
)