重定向bas​​h命令的返回值

时间:2014-03-25 00:06:00

标签: bash

以下脚本尝试创建目录,但由于temp1不存在而失败。我想用" tee重定向输出。"问题在于" $?"获得" tee"的回报价值这是成功的,而不是" mkdir"的价值。哪个失败了。我怎样才能使用" tee"但检查" mkdir"

的返回值

文件名:./ test.sh

#!/bin/bash

mkdir temp1/temp2 | tee test_output.txt
if [ "$?" != 0 ]; then
    echo "Command failed"
else
    echo "Command successed"
fi

./ test.sh

mkdir:无法创建目录`temp1 / temp2':没有这样的文件或目录

命令成功

4 个答案:

答案 0 :(得分:3)

由于您已说明bash,因此您可以使用PIPESTATUS。来自man页面:

  

PIPESTATUS
                包含退出列表的数组变量(请参阅下面的数组)                 来自最近执行的进程的状态值                 前台管道(可能只包含一个命令)。

例如:

#!/bin/bash

mkdir temp1/temp2 | tee test_output.txt
if [ "${PIPESTATUS[0]}" != 0 ]; then
    echo "Command failed"
else
    echo "Command succeeded"
fi

答案 1 :(得分:0)

有终端相关解决方案,但您可以通过将此命令包装在函数中来解决此问题。

create_dir() {
  { mkdir temp1/temp2 || return 1; } | tee test_output.txt
  return $?
}

create_dir
if [ "$?" != 0 ]; then
  echo "Command failed"
else
  echo "Command successed"
fi

答案 2 :(得分:0)

你能不能只使用mkdir -p来强制创建目录?

答案 3 :(得分:0)

也许没有目录temp1 使用参数-p和mkdir:

mkdir -p temp1/temp2 | tee test_output.txt