代理stdout / stderr在bash中保持顺序
我试图通过以下方式在文件的每一行输出前添加一些信息:
>抓住stdout和stderr 这是我的测试脚本: #!/bin/bash # # Test proxying stdout and stderr # function proxy-stdouterr() { local name="$1" local handle=$2 while IFS='' read -r line do echo -e "[ ${name}: ${line} ]" >&${handle} done } # Output some messages and attempt to parse them ( echo "1: Normal message" echo "2: Error" >&2 echo "3: Normal message" echo "4: Error" >&2 ) 2> >(proxy-stdouterr "stderr" 2) > >(proxy-stdouterr "stdout" 1) 这工作得相当好,但不保留终端中的顺序(Ubuntu 12.04). 不代理输出时: 1: Normal message 2: Error 3: Normal message 4: Error 但是,当不保留代理订单时.更糟糕的是,这不是确定性的,大部分时间是: [ stderr: 2: Error ] [ stderr: 4: Error ] [ stdout: 1: Normal message ] [ stdout: 3: Normal message ] 但偶尔: [ stderr: 2: Error ] [ stdout: 1: Normal message ] [ stderr: 4: Error ] [ stdout: 3: Normal message ] 我怎样才能解决这个问题? 谢谢 解决方法
正如其他人所指出的那样,这是一个没有明显的同步问题
回答时不知道你特别控制哪些部分 并希望改变. 恕我直言有两个主要攻击面: >流缓冲.大多数C派生程序不缓冲stderr, 无论如何,如果图片中的任何地方都有排队,那么你就是在保持秩序的情况下搞砸了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |