J'ai le code suivant dans un fichier provenant à la fois de zsh et de 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
est zsh
si le shell est zsh et bash
si le shell est bash.
Chacune des fonctions ci-dessus contient du code qui fonctionne avec zsh, mais pas bash.
Lorsque je source ce fichier, je reçois les erreurs suivantes.
bash: <filename>: line 67: syntax error near unexpected token `('
bash: <filename>: line 67: ` lss() { l -l ${1:-.}/*(s,S,t); }'
Pour le moment, j'utilise eval
pour contourner la vérification de la syntaxe de 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
Existe-t-il une meilleure solution à ce problème? (peut-être celui qui n'utilise pas eval
)
Plutôt que d'essayer d'obtenir que Bash ne vérifie pas la syntaxe, pourquoi ne pas avoir votre script qui fait le sourcing de cette source uniquement quand il est appelé par le bon shell.
la source