Tengo el siguiente código en un archivo que proviene tanto de zsh como 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
es zsh
si el shell es zsh y bash
si el shell es bash.
Cada una de las funciones anteriores contiene código que funciona con zsh, pero no bash.
Cuando obtengo este archivo, recibo los siguientes errores.
bash: <filename>: line 67: syntax error near unexpected token `('
bash: <filename>: line 67: ` lss() { l -l ${1:-.}/*(s,S,t); }'
Por el momento, estoy usando eval
para evitar la verificación de sintaxis 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
¿Hay una mejor solución para este problema? (tal vez uno que no use eval
)
En lugar de tratar de hacer que Bash no compruebe la sintaxis, ¿por qué no tener su script que está haciendo el abastecimiento de esta única fuente cuando la llama el shell correcto?
fuente