如何返回$ code作为此脚本的退出代码,而不是最后一个命令的退出代码rm" $ {fifo}"。
#!/bin/bash
fifo=myPipe
mkfifo "${fifo}"|| exit 1
{
read code <${fifo}
} | {
timeout 1 sleep 2
timeoutCode=$?
echo "${timeoutCode}" >${fifo}
}
rm "${fifo}"
答案 0 :(得分:2)
也许这可以达到您的目的:
这个答案分为两个部分,您正在寻找:
${PIPESTATUS[@]}
数组获取管道各个阶段的退出状态... 代码:
#!/bin/bash
return_code() { return $1; } # A dummy function to set $? to any value
fifo=myPipe
mkfifo "${fifo}"|| exit 1
{
read code <${fifo}
return_code $code
} | {
timeout 1 sleep 2
timeoutCode=$?
echo "${timeoutCode}" >${fifo}
}
ret=${PIPESTATUS[0]}
rm "${fifo}"
exit $ret
考虑到整个脚本的预期退出代码实际上是通过管道的第2阶段生成的,下面的逻辑也可以工作。
#!/bin/bash
fifo=myPipe
trap "rm $fifo" EXIT #Put your cleanup here...
mkfifo "${fifo}"|| exit 1
{
read code <${fifo}
} | {
timeout 1 sleep 2
timeoutCode=$?
echo unused > ${fifo}
exit $timeoutCode
}