Tôi đang sử dụng getopt
(không phải getops
) để cung cấp khả năng cho tập lệnh bash của tôi xử lý các tùy chọn và chuyển mạch (cả dạng dài và dạng ngắn).Trapping getopt invalid options
Tôi muốn có thể bẫy các tùy chọn không hợp lệ và xử lý chúng, thường phản hồi lại rằng người dùng nên thử cmd --help
và sau đó thoát khỏi tập lệnh.
Thing là, các tùy chọn không hợp lệ đang được đánh bắt bằng getopt, mà là chính nó xuất ra một thông điệp như "getopt: tùy chọn không hợp lệ - 'x'"
Dưới đây là mô hình tôi đang sử dụng để thiết lập getopt của tôi thông số:
set -- $(getopt -o $SHORT_OPTIONS -l $LONG_OPTIONS -- "[email protected]")
trong đó cả $ LONG_OPTIONS và $ SHORT_OPTIONS là danh sách tùy chọn được phân tách bằng dấu phẩy.
Đây là cách tôi xử lý chế biến các tùy chọn:
while [ $# -gt 0 ]
do
case "$1" in
-h|--help)
cat <<END_HELP_OUTPUT
Help
----
Usage: ./cmd.sh
END_HELP_OUTPUT
shift;
exit
;;
--opt1)
FLAG1=true
shift
;;
--opt2)
FLAG2=true
shift
;;
--)
shift
break
;;
*)
echo "Option $1 is not a valid option."
echo "Try './cmd.sh --help for more information."
shift
exit
;;
esac
done
getopt -q
sẽ ngăn chặn đầu ra, nhưng kế hoạch bẫy của tôi trong báo cáo kết quả case
vẫn thất bại trong việc làm những gì tôi mong đợi. Thay vào đó, chương trình chỉ thực hiện, mặc dù các đối số không hợp lệ.
Trong trường hợp nào *) đạt được? – jarno
@jarno Nếu bạn có sự không khớp giữa câu lệnh 'case' và lệnh gọi getopt', nó sẽ bị bắt ở đó. Nó chỉ là lập trình phòng thủ. – l0b0