本文共 874 字,大约阅读时间需要 2 分钟。
NOTE: 本文信息转自 。侵删!!!
对于非管道命令,使用 $? 或直接通过一个 if 语句来检查以保持其简洁。
if ! mv "${file_list}" "${dest_dir}/" ; then echo "Unable to move ${file_list} to ${dest_dir}" >&2 exit "${E_BAD_MOVE}"fi# Ormv "${file_list}" "${dest_dir}/"if [[ "$?" -ne 0 ]]; then echo "Unable to move ${file_list} to ${dest_dir}" >&2 exit "${E_BAD_MOVE}"fi
Bash也有 PIPESTATUS 变量,允许检查从管道所有部分返回的代码。如果仅仅需要检查整个管道是成功还是失败,以下的方法是可以接受的:
tar -cf - ./* | ( cd "${dir}" && tar -xf - )if [[ "${PIPESTATUS[0]}" -ne 0 || "${PIPESTATUS[1]}" -ne 0 ]]; then echo "Unable to tar files to ${dir}" >&2fi
可是,只要你运行任何其他命令, PIPESTATUS 将会被覆盖。如果你需要基于管道中发生的错误执行不同的操作,那么你需要在运行命令后立即将 PIPESTATUS 赋值给另一个变量(别忘了 [ 是一个会将 PIPESTATUS 擦除的命令)。
tar -cf - ./* | ( cd "${DIR}" && tar -xf - )return_codes=(${PIPESTATUS[*]})if [[ "${return_codes[0]}" -ne 0 ]]; then do_somethingfiif [[ "${return_codes[1]}" -ne 0 ]]; then do_something_elsefi
转载地址:http://mworb.baihongyu.com/