博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shell中管道命令返回值
阅读量:2490 次
发布时间:2019-05-11

本文共 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/

你可能感兴趣的文章
Hive执行job时return code 2排查
查看>>
hive常用函数及数据结构介绍
查看>>
Hive面试题干货(亲自跟着做了好几遍,会了的话对面试大有好处)
查看>>
力扣题解-230. 二叉搜索树中第K小的元素(递归方法,中序遍历解决)
查看>>
力扣题解-123. 买卖股票的最佳时机 III(动态规划)
查看>>
Django 源码阅读:服务启动(wsgi)
查看>>
Django 源码阅读:url解析
查看>>
Docker面试题(一)
查看>>
第一轮面试题
查看>>
2020-11-18
查看>>
Docker面试题(二)
查看>>
一、redis面试题及答案
查看>>
消息队列2
查看>>
C++ 线程同步之临界区CRITICAL_SECTION
查看>>
测试—自定义消息处理
查看>>
MFC中关于虚函数的一些问题
查看>>
根据图层名获取图层和图层序号
查看>>
规范性附录 属性值代码
查看>>
提取面狭长角
查看>>
Arcsde表空间自动增长
查看>>