Eu tenho o seguinte código em um arquivo que é originado pelo zsh e pelo 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
se o shell for zsh e bash
se o shell for bash.
Cada uma das funções acima contém código que funciona com zsh, mas não com bash.
Quando origino este arquivo, recebo os seguintes erros.
bash: <filename>: line 67: syntax error near unexpected token `('
bash: <filename>: line 67: ` lss() { l -l ${1:-.}/*(s,S,t); }'
No momento, estou usando eval
para ignorar a verificação de sintaxe do 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 uma solução melhor para esse problema? (talvez um que não use eval
)
Em vez de tentar fazer com que o Bash não verifique a sintaxe, por que não fazer com que o seu script que está fornecendo essa única fonte seja quando está sendo chamado pelo shell correto.
fonte