当另一个命令的输出通过管道输出时,xdg-open不起作用

keb*_*ebs 4 bash pipe

假设我在某个地方有一个独特的文件file.ext.它由我的Ubuntu框索引,所以命令locate file.ext正确地给了我(单个)位置,比方说/usr/local/some/place/file.ext.

所以我认为这个:

locate file.ext | xdg-open
Run Code Online (Sandbox Code Playgroud)

将使用与文件类型相关联的默认应用程序打开文件(有一个,这不是问题),就像我已输入 xdg-open /usr/local/some/place/file.ext

相反,我得到了"使用"消息xdg-open,好像它是在没有参数的情况下调用的.

所以问题是:我对管道有什么不妥吗?或者这个特定命令有些问题?

小智 13

因为你必须传递filename作为选项,而不是stdin上的数据.使用xargs:

locate file.ext | xargs xdg-open
Run Code Online (Sandbox Code Playgroud)

或者只是子壳:

xdg-open "$( locate file.ext )"
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,刚刚测试过,两个都可以。现在我也更好地理解了 xargs 的目的! (2认同)