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
)
Anstatt zu versuchen, Bash dazu zu bringen, die Syntax nicht zu überprüfen, sollten Sie Ihr Skript, das die Beschaffung dieser Quelle übernimmt, nur dann verwenden, wenn es von der richtigen Shell aufgerufen wird.
quelle