为什么 xargs xargs 执行 xargs 会打印到屏幕上的内容?

Why does xargs xargs execute what xargs would have printed to the screen?

据我了解,Linux 中的 xargs 命令可用于获取一个命令的输出并将其作为另一个命令的输入传递。但是,我注意到将 xargs 作为参数传递给自身会执行以前简单的输出,如果它在没有参数的情况下被调用并且默认为 echo。我的问题是为什么调用 xargs 作为自身的参数执行输出?

$ echo ls | xargs

ls

$ echo ls | xargs xargs
AppData
'Application Data'
centos-7.box
Contacts
Cookies
Desktop
Documents
Downloads
Dropbox
  • echo foo 打印 foo.
  • 因此,echo foo | xargs bar 在没有输入的情况下运行 bar foo;它相当于 bar foo </dev/null.
  • 因此,echo ls | xargs xargs 在没有输入的情况下运行 xargs ls;它相当于 xargs ls </dev/null.
  • xargs ls 无输入运行 ls 一次。

将来,您可能会发现将 -t 标志用于 xargs 会很有帮助,它会在 运行 之前打印命令:

$ echo foo | xargs -t xargs -t
xargs -t foo 
foo 
xargs: foo: No such file or directory