catalina.out这在我的情况下是 Not Acceptable -6ren">
gpt4 book ai didi

linux - sh 不支持进程替换 <(...) 吗?

转载 作者:IT王子 更新时间:2023-10-29 01:05:58 26 4
gpt4 key购买 nike

在 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。问题在于进程替换:<(...)

有人能告诉我 sh 在这里有什么不同吗?

[编辑]

感谢您的回答!

使用 capistrano 进行部署时出现问题。它默认使用 sh 但我现在将其更改为 bash。我不能做正常管道的原因是在使用 tail -F | grep -q --line-buffered 时, grep 不会在匹配后立即退出。必须对文件再进行一次编辑,如 echo "" >> catalina.out这在我的情况下是 Not Acceptable 。

最佳答案

语法 <(...)仅 BASH 支持。

对于任何 POSIX shell,使用这种方法:

sh -c 'tail -n 1000 -F catalina.out | if grep -qP --line-buffered ".+" ; then ...'

即将标准输入重定向移到 if 前面用 pipe 。 if会将标准输入传递给 grep .

if tail ...| grepif 起将无法正常工作将无法看到它的 then/fi因为管道分隔了进程。

关于linux - sh 不支持进程替换 <(...) 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18631499/

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