linux – 不支持进程替换<(...)?
发布时间:2020-12-14 02:09:44 所属栏目:Linux 来源:网络整理
导读:在Centos 6机器上,这适用于: bash -c 'if grep -qP --line-buffered ".+" (tail -n 1000 -F catalina.out) ; then echo "yes"; fi' 这不是: sh -c 'if grep -qP --line-buffered ".+" (tail -n 1000 -F catalina.out) ; then echo "yes"; fi' 我明白了: s
在Centos 6机器上,这适用于:
bash -c 'if grep -qP --line-buffered ".+" <(tail -n 1000 -F catalina.out) ; then echo "yes"; fi' 这不是: sh -c 'if grep -qP --line-buffered ".+" <(tail -n 1000 -F catalina.out) ; then echo "yes"; fi' 我明白了: sh: -c: line 0: syntax error near unexpected token `(' sh: -c: line 0: `if grep -qP --line-buffered ".+" <(tail -n 1000 -F catalina.out) ; then echo "yes"; fi' 没关系grep和tail.问题在于过程替换问题:<(...) 有人可以告诉我这里有什么不同吗? [编辑] 谢谢你的回答! 使用capistrano进行部署时出现了问题.它默认使用sh,但我现在将其更改为bash. 解决方法
语法<(...)仅由BASH支持. 对于任何POSIX shell,请使用以下方法:
sh -c 'tail -n 1000 -F catalina.out | if grep -qP --line-buffered ".+" ; then ...' 即使用管道移动if前面的stdin重定向. if会将stdin传递给grep. 如果尾… | grep将无法工作,因为if将无法看到它/ fi,因为管道分离进程. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |