出于好奇,我试图了解这里发生的事情,尽管我可以复制并粘贴终端的输出来做我需要做的事情。以下命令不打印任何内容。
ls /opt/local/var/macports/registry/portfiles -1 | sed 's/-.*//g' | sort -u | parallel "sudo port -N install" {} 2>&1 | grep -Po "Use '\K.*(?=')" | parallel "{}"
我调用 ls 的目录包含一堆文件名,以我想提取的字符串开头,以第一个破折号结尾(所以 stringexample-4.2009 管道 stringexample
进入并行 (像 xargs 但要运行每行单独)。运行命令 sudo port install <stringexample>
后,我得到如下错误输出:
Unable to activate port <stringexample>. Use 'port -f activate <stringexample>' to force the activation.
现在,我希望运行 port -f activate <stringexample>
。但是,我似乎无法对到达终端的输出 port -f activate gettext
做任何事情。
我什至不能执行 ... | grep -Po "Use '\K.*(?=')" | xargs echo
或 ... | grep -Po "Use '\K.*(?=')" >> commands_to_run.txt
(文件的输出流只创建一个空文件),尽管命令的部分较短:
ls /opt/local/var/macports/registry/portfiles -1 | sed 's/-.*//g' | sort -u | parallel "sudo port -N install {}" 2>&1 | grep -Po "Use '\K.*(?=')"
将命令打印到终端。为什么管道操作员在这里不起作用?如果我希望运行的命令正在输出到终端,那么肯定有一种方法可以捕获它们。