需要了解xargs和管道的概念

Mis*_*tyD 3 linux pipe

我已经在这个问题上挣扎了一段时间,如果有人能为我澄清一下,我将不胜感激。假设我试图将这两个命令通过管道连接在一起。readlinkcat

readlink Command output
$ readlink -f SUService.log
/cygdrive/c/SUService.log
Run Code Online (Sandbox Code Playgroud)

现在如果我尝试这样的事情(它失败了)

$ readlink -f SUService.log | cat
Run Code Online (Sandbox Code Playgroud)

虽然这样的事情会起作用

$ readlink -f SUService.log | xargs cat
Run Code Online (Sandbox Code Playgroud)

我想知道这是为什么?我在这里阅读了这篇文章,其中 OP 有一个类似的问题,这篇文章试图解释参数和输入之间的区别,但是我仍然无法理解已接受的答案。据我所知,readlink将结果返回到 stdout 是终端屏幕,同时cat需要输入作为参数。这反过来提示我问我如何知道命令的输出(例如 locate 或 readlink)是否可以作为下一个命令的参数?我一直在做更多的阅读,结果我想知道什么时候应该使用 xarg 命令?

Joh*_*024 6

下面的命令也不会失败。它只是做了一些你没想到的事情:

readlink -f SUService.log | cat
Run Code Online (Sandbox Code Playgroud)

cat给定 stdin 时,它会将其复制到 stdout。它不会在其中查找文件名。

或者,这将从命名文件中读取:

cat "$(readlink -f SUService.log)"
Run Code Online (Sandbox Code Playgroud)

xargs也会将名称放在cat命令行上,产生相同的结果:

readlink -f SUService.log | xargs cat
Run Code Online (Sandbox Code Playgroud)

  • 当您想在命令行上使用 stdin 作为参数时,请使用 `xargs`。`回声文件名| xargs cat` 与 `cat filename` 相同。 (2认同)