Ich habe den folgenden Code in einer Datei, die sowohl von zsh als auch von bash stammt.
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
ist, zsh
wenn die Shell zsh ist und bash
wenn die Shell bash ist.
Jede der oben genannten Funktionen enthält Code, der mit zsh funktioniert, jedoch nicht mit bash.
Wenn ich diese Datei beschaffe, erhalte ich die folgenden Fehler.
bash: <filename>: line 67: syntax error near unexpected token `('
bash: <filename>: line 67: ` lss() { l -l ${1:-.}/*(s,S,t); }'
Im Moment verwende ich eval
, um die Syntaxprüfung von bash zu umgehen.
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
Gibt es eine bessere Lösung für dieses Problem? (vielleicht eine, die nicht verwendet eval
)