下面的脚本尝试创建一个目录,但由于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