Pipe

我可以用管道將程序的輸出重定向到 cat 嗎?

  • January 23, 2016

我有一個包含三個文件和基本內容的文件夾:

$ tail *
==> file1 <==
file 1 contents

==> file2 <==
file 2 contents

==> file3 <==
file 3 contents

我想使用 . 查看最新文件的內容cat。我嘗試像這樣使用它:

$ ls -ctr | tail -1
file3

$ ls -ctr | tail -1 | cat
file3

但如您所見,它只列印最後一個文件的名稱。我認為管道會輸出tail並處理具有該名稱的文件,就像使用 subshel​​l 命令一樣:

$ cat $(ls -ctr | tail -1)
file 3 contents

為什麼重定向方法不起作用,有沒有辦法用管道而不是子shell來完成這個?

set   ./file[123]            ### set an arg array of the glob resolution
while [ "${2+:}" ]           ### while there are at least 2 args
do    [ "$1" -nt "$2" ] &&   ### if $1 is newer than $2 then ...
     set "$@" "$1"; shift   ### reset the array to itself + $1; shift regardless
done; cat <"$1"              ### after loop cat $1 or report no glob match

您想使用以下xargs命令:

$ ls -ctr | tail -1 | xargs cat

這將採用tail -1命令的 STDOUT,而不是將其用作cat命令的 STDIN,而是將其用作命令的選項cat

引用自:https://unix.stackexchange.com/questions/257096