どもです。
shell_exec()で、あるディレクトリの最新ファイルの中身を取得したい。
linuxコマンドで最新ファイル名を取得するのは
ls -rt | tail -n 1
とか、
ls -t | head -1 | tail -1
とか。
指定したファイルを開いて標準出力するのは、
cat ファイル名
では、最新ファイルを開いて標準出力する(lsした結果をcatする)のは?
cat $(ls -t | head -1 | tail -1 | cat)
Q. なぜこんなややこしいことに?
A. ls の戻り値は配列なので、文字列に変換しないといけないため。
Q. なんで cat が2つあるの?
A. 左の cat は「ファイルを読み込む」、右の cat は「標準出力に流し込む」ためのもの。
lsの結果をcatで文字列として出力、出力された文字列をファイル名としてcatで読み込みにいく。
という処理の流れになる。
shell_execで実行する場合は、
shell_exec("ssh *****@000.00.0.000 'cd /*****/; cat $(ls -t | grep .log | head -1 | tail -1 | cat)' 2>&1");
といった感じ。
「2>&1」だと文字列として取得することになるので、ファイルが大きいなら一時ファイルに落としてしまおう。
linuxとかshellとかはど素人も甚だしいが、なんとか要件を満たすことができた。