Tôi có đoạn mã sau trong một tệp có nguồn gốc từ cả zsh và 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
là zsh
nếu vỏ là zsh và bash
nếu vỏ là bash.
Mỗi hàm trên chứa mã hoạt động với zsh, nhưng không bash.
Khi tôi lấy tệp này, tôi nhận được các lỗi sau.
bash: <filename>: line 67: syntax error near unexpected token `('
bash: <filename>: line 67: ` lss() { l -l ${1:-.}/*(s,S,t); }'
Hiện tại, tôi đang sử dụng eval
để bỏ qua việc kiểm tra cú pháp của 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
Có một giải pháp tốt hơn cho vấn đề này? (có lẽ không sử dụng eval
)