3つのファイルと基本的なコンテンツを含むフォルダーがあります。
$ 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
の出力を受け取り、サブシェルコマンドの場合と同様に、その名前のファイルを処理すると思いました。
$ cat $(ls -ctr | tail -1)
file 3 contents
リダイレクト方法が機能しないのはなぜですか?サブシェルの代わりにパイプを使用してこれを実現する方法はありますか?
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
コマンドのオプションとして使用されます。
あなたは次のようなことを試すことができます
_less $(ls -ctr | tail - 1)
_
($(...)
は普遍的ではないので、バッククォートを置き換える必要があるかもしれません)。 less
を好みに変更します。