파이프를 사용하여 프로그램 출력을 cat으로 리디렉션할 수 있나요?

파이프를 사용하여 프로그램 출력을 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

하지만 보시다시피 마지막 파일의 이름만 인쇄됩니다. 나는 파이프라인이 tailsubshell 명령과 마찬가지로 해당 이름의 파일을 가져와 처리할 것이라고 생각했습니다.

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

리디렉션 방법이 작동하지 않는 이유는 무엇이며, 서브셸 대신 파이프를 사용하여 이를 수행할 수 있는 방법이 있습니까?

답변1

xargs다음 명령을 사용하고 싶습니다 .

$ ls -ctr | tail -1 | xargs cat

이는 명령의 STDOUT을 사용 하고 이를 명령의 STDIN tail -1으로 사용하는 대신 명령에 대한 옵션으로 사용합니다.catcat

답변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맛을 바꿔보세요 .

관련 정보