以下脚本尝试创建目录,但由于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':没有这样的文件或目录
命令成功
答案 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