Một cách phổ biến là:
die() {
IFS=' ' # make sure "$*" is joined with spaces
# output the arguments if any on stderr:
[ "$#" -eq 0 ] || printf '%s\n' "$*" 1>&2
exit 1
}
sau đó bạn sử dụng nó như thế này:
mkdir -p some/path || die "mkdir failed with status $?"
Hoặc nếu bạn muốn nó bao gồm trạng thái thoát, bạn có thể thay đổi nó thành:
die() {
last_exit_status=$?
IFS=' '
printf '%s\n' "FATAL ERROR: $* (status $last_exit_status)" 1>&2
exit 1
}
và sau đó sử dụng nó dễ dàng hơn một chút:
mkdir -p some/path || die "mkdir failed"
Khi thất bại, mkdir
nhiều khả năng đã đưa ra thông báo lỗi, do đó thông báo thứ hai có thể được xem là dư thừa và bạn chỉ có thể làm:
mkdir -p some/path || exit # with the same (failing) exit status as mkdir's
mkdir -p some/path || exit 1 # with exit status 1 always
(hoặc sử dụng biến thể đầu tiên die
ở trên mà không cần đối số)
Chỉ trong trường hợp bạn chưa từng thấy command1 || command2
trước đó, nó sẽ chạy command1
và nếu command1
thất bại, nó sẽ chạy command2
.
Vì vậy, bạn có thể đọc nó như "làm cho thư mục hoặc chết".
Ví dụ của bạn sẽ giống như:
mkdir -p some/path || die "mkdir failed"
cd some/path || die "cd failed"
some_command || die "some_command failed"
Hoặc bạn có thể căn chỉnh dies
thêm ở bên phải để mã chính rõ ràng hơn.
mkdir -p some/path || die "mkdir failed"
cd some/path || die "cd failed"
some_command || die "some_command failed"
Hoặc trên dòng sau khi dòng lệnh dài:
mkdir -p some/path ||
die "mkdir failed"
cd some/path ||
die "cd failed"
some_command ||
die "some_command failed"
Ngoài ra, nếu bạn định sử dụng tên some/path
nhiều lần, hãy lưu trữ nó trong một biến để bạn không phải tiếp tục nhập tên và có thể dễ dàng thay đổi tên nếu bạn cần. Và khi truyền các đối số biến cho các lệnh, hãy đảm bảo sử dụng --
dấu phân cách tùy chọn để đối số không được lấy làm tùy chọn nếu bắt đầu bằng -
.
dir=some/path
mkdir -p -- "$dir" || die "Cannot make $dir"
cd -P -- "$dir" || die "Cannot cd to $dir"
some_command || die "Cannot run some_command"