세 개의 파일과 기본 콘텐츠가 포함된 폴더가 있습니다.
$ 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
리디렉션 방법이 작동하지 않는 이유는 무엇이며, 서브셸 대신 파이프를 사용하여 이를 수행할 수 있는 방법이 있습니까?
답변1
xargs
다음 명령을 사용하고 싶습니다 .
$ ls -ctr | tail -1 | xargs cat
이는 명령의 STDOUT을 사용 하고 이를 명령의 STDIN tail -1
으로 사용하는 대신 명령에 대한 옵션으로 사용합니다.cat
cat
답변2
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
답변3
다음과 같은 것을 시도해 볼 수 있습니다.
less $(ls -ctr | tail - 1)
(이것은 $(...)
보편적이지 않습니다. 백틱을 교체해야 할 수도 있습니다). less
맛을 바꿔보세요 .