加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 不支持进程替换

发布时间:2020-12-13 19:06:51 所属栏目:Linux 来源:网络整理
导读:在Centos 6机器上,这适用于: bash -c 'if grep -qP --line-buffered ".+" 这不是: sh -c 'if grep -qP --line-buffered ".+" 我明白了: sh: -c: line 0: syntax error near unexpected token `('sh: -c: line 0: `if grep -qP --line-buffered ".+" 没关

在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.
我无法做正常管道的原因是当使用tail -F |时grep -q –line-buffered,grep不会在匹配后立即退出.必须再对文件进行一次编辑,例如echo“”>> catalina.out,这在我的情况下是不可接受的.

最佳答案
语法<(...)仅由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,因为管道分离进程.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读