Pipe
我可以用管道將程序的輸出重定向到 cat 嗎?
我有一個包含三個文件和基本內容的文件夾:
$ 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
並處理具有該名稱的文件,就像使用 subshell 命令一樣:$ 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
。