Bash 使用一个命令的输出作为另一个命令的参数

Bash 使用一个命令的输出作为另一个命令的参数,bash,pipe,xargs,Bash,Pipe,Xargs,我正在尝试grep一个文件并将行号输出到 vim +{lineNumber} filetoedit 不幸的是,Vim抛出了一个错误 Vim:警告:输入不是来自端子 例如: grep -nF 'Im looking for this' testfile.txt | cut -f1 -d: | xargs vim +{} testfile.tx 由xargs运行的命令继承了xargs中的stdin,因此其输入连接到cut中的管道,而不是终端 将结果分配给一个变量并使用该变量 line=$(gre

我正在尝试grep一个文件并将行号输出到

vim +{lineNumber} filetoedit
不幸的是,Vim抛出了一个错误

Vim:警告:输入不是来自端子

例如:

grep -nF 'Im looking for this' testfile.txt | cut -f1 -d: | xargs vim +{} testfile.tx

xargs
运行的命令继承了
xargs
中的
stdin
,因此其输入连接到
cut
中的管道,而不是终端

将结果分配给一个变量并使用该变量

line=$(grep -nF 'Im looking for this' testfile.txt | cut -f1 -d: )
vim "+$line" testfile.txt

我想他没想到会这样。在同一个文件上打开多个
vim
实例没有什么意义。他也没有使用
xargs
选项为每个输入分别运行命令。我认为他使用
xargs
只是因为这是他知道的将stdin转换为参数的唯一方法,不是因为他希望有多个参数。@scott
xargs
通常用于将
stdin
转换为多个参数。如果只是一个参数,通常使用命令替换。我的意思是
var=$(shellcommand)
。您还可以直接在
vim
命令中添加数据:
vim“+$(grep…)testfile.txt
。顺便说一句,如果您想确保只获得一个匹配,请使用
-m1