Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取管道后的bash返回代码_Bash_Shell_Unix_Pipe_Exit Code - Fatal编程技术网

读取管道后的bash返回代码

读取管道后的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;}#设置$的伪函数?不值 先进先出=

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

#/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
        }