gpt4 book ai didi

读取管道后 bash 返回代码

转载 作者:行者123 更新时间:2023-12-05 04:16:31 24 4
gpt4 key购买 nike

如何返回 $code 作为此脚本的退出代码,而不是最后一个命令 rm "${fifo}"的退出代码。

#!/bin/bash

fifo=myPipe
mkfifo "${fifo}"|| exit 1
{
read code <${fifo}
} | {
timeout 1 sleep 2
timeoutCode=$?
echo "${timeoutCode}" >${fifo}
}
rm "${fifo}"

最佳答案

也许这可以满足您的目的:

这个答案有 2 个部分,您正在寻找:

  1. 设置 $?到任何需要的值
  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
}

关于读取管道后 bash 返回代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27186291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com