返回重定向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':没有这样的文件或目录

命令成功

既然您说的是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

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

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

您不能直接使用mkdir -p强制创建目录吗?

可能没有temp1目录在mkdir中使用参数-p:

mkdir -p temp1/temp2 | tee test_output.txt

最新更新