读取管道后的bash返回代码
如何返回$code作为此脚本的退出代码,而不是最后一个命令rm“${fifo}”的退出代码读取管道后的bash返回代码,bash,shell,unix,pipe,exit-code,Bash,Shell,Unix,Pipe,Exit Code,如何返回$code作为此脚本的退出代码,而不是最后一个命令rm“${fifo}”的退出代码 #/bin/bash 先进先出=我的管道 mkfifo“${fifo}”| |出口1 { 读取代码${fifo} } rm“${fifo}” 也许这可以满足您的目的: 这个答案有两个部分,您一直在寻找: 设置$?到任何要求的值 使用${PIPESTATUS[@]}数组获取管道各个阶段的退出状态 代码: #/bin/bash return_code(){return$1;}#设置$的伪函数?不值 先进先出=
#/bin/bash
先进先出=我的管道
mkfifo“${fifo}”| |出口1
{
读取代码${fifo}
}
rm“${fifo}”
也许这可以满足您的目的:
这个答案有两个部分,您一直在寻找:
${PIPESTATUS[@]}
数组获取管道各个阶段的退出状态#/bin/bash
return_code(){return$1;}#设置$的伪函数?不值
先进先出=我的管道
mkfifo“${fifo}”| |出口1
{
读取代码${fifo}
}
ret=${PIPESTATUS[0]}
rm“${fifo}”
退出$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
}
#/bin/bash
先进先出=我的管道
陷阱“rm$fifo”出口#将清理工作放在这里。。。
mkfifo“${fifo}”| |出口1
{
读取代码${fifo}
退出$timeoutCode
}
yes在第一组中,我将跟踪-f一个文件,在第二组中,我将grep一个匹配或超时,然后通过管道通知第一组,这将杀死尾部,最后我想显示一个退出代码,显示我是否超时,因此第0阶段的退出代码是最后一个函数“return\u code”的返回代码?是,${PIPESTATUS[0]}
将包含第一阶段的退出状态,这里正好是$code
。。。
#!/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
#!/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
}