bash - 如何在 Bash 中的命令的先前 xargs 的管道的 grep 输出上运行类似 xargs 的命令
问题描述
出于好奇,我试图了解这里发生了什么,即使我可以复制并粘贴终端的输出来做我需要做的事情。以下命令不打印任何内容。
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.*(?=')"
将命令打印到终端。为什么管道操作员在这里不起作用?如果我希望运行的命令正在输出到终端,那么肯定有一种方法可以捕获它们。
解决方案
推荐阅读
- apache-camel - Camel 2 中的 JCachePolicy
- java - 如何从 github 库构建 gradle jar
- google-apps-script - 如何以相同的顺序在 Googlesheet 中复制新数据
- python - 如何自动更新 pyinstaller 生成的 .exe 文件
- mongodb - Mongo Aggregate $project 变量作为字段名
- django - Django - 提交表单时无法获取模型选择 FK
- reactjs - 怎样才能将排列的元素一一取出来?在 Reactjs 中的 div 内
- c++ - 不能 emplace_back 到同时也是函数的向量
- react-native - 我从服务器获得了以下数据,并在名称中显示了重复的数据。我不想要重复的数据。你能帮忙解决这个问题吗
- macos - Qemu 如何通过硬件虚拟化在 macOS 和 Windows 上运行?