Tôi đang cố gắng tạo một hàm trong một kịch bản lệnh shell có lệnh và thực thi nó bằng eval, sau đó thực hiện một số xử lý sau dựa trên thành công của lệnh. Thật không may mã không hoạt động như tôi mong đợi. Dưới đây là những gì tôi có:Lấy mã thoát cho lệnh eval trong sh
#!/bin/sh
...
function run_cmd()
{
# $1 = build cmd
typeset cmd="$1"
typeset ret_code
eval $cmd
ret_code=$?
if [ $ret_code == 0 ]
then
# Process Success
else
# Process Failure
fi
}
run_cmd "xcodebuild -target \"blah\" -configuration Debug"
Khi lệnh ($cmd
) thành công, nó hoạt động tốt. Khi lệnh không thành công (ví dụ: lỗi biên dịch), tập lệnh sẽ tự động thoát trước khi tôi có thể xử lý lỗi. Có cách nào tôi có thể ngăn chặn eval thoát khỏi, hoặc là có một cách tiếp cận khác nhau tôi có thể làm điều đó sẽ cho phép tôi đạt được hành vi mong muốn của tôi?
không nên thoát tự động trừ khi bạn có 'set -e' ở đâu đó trong tập lệnh của mình. Nếu bạn có nó, 'set + e' sẽ vô hiệu hóa nó. –
* sigh * Tôi đã có 'set -o errexit' kéo dài ở đầu tập lệnh người gọi. Cảm ơn bạn đã chỉ ra điều đó. – Jeff