Saya memiliki kode berikut dalam file yang bersumber dari zsh dan 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
adalah zsh
jika shell adalah zsh dan bash
jika shell adalah bash.
Masing-masing fungsi di atas berisi kode yang berfungsi dengan zsh, tetapi tidak bash.
Ketika saya sumber file ini, saya menerima kesalahan berikut.
bash: <filename>: line 67: syntax error near unexpected token `('
bash: <filename>: line 67: ` lss() { l -l ${1:-.}/*(s,S,t); }'
Saat ini, saya menggunakan eval
untuk memotong memeriksa sintaks 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
Apakah ada solusi yang lebih baik untuk masalah ini? (mungkin yang tidak digunakan eval
)
Daripada mencoba dan membuat Bash untuk tidak memeriksa sintaks, mengapa skrip Anda tidak melakukan sumber dari sumber ini hanya ketika sedang dipanggil oleh shell yang benar.
sumber