Kshでは機能しないが、shでは正常に機能する次の行があります。
cat `find /home/peter/databases -name "cells.txt"`
この行が/ usr/bin/shスクリプト内にある場合、これは機能しています。ただし、/ usr/bin/ksh内にある場合はそうではありません。
これがなぜそうなのかヒントはありますか?
使ってます:
SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 4
「機能しない」とは、スクリプトがハングすることを意味します(cat
にファイル名がパラメーターとして指定されていない場合の動作のようなもの)
Kshスクリプトでは、find /home/peter/databases -name "cells.txt"
の出力は空ではありません。この場合、スクリプトは見つかったファイルを一覧表示できます。しかし、上記のように逆引用符を使用して見つかったファイルをキャットしようとすると、問題が発生します。
Findコマンドでリストされたファイルは1000近くありますが、それらのほとんどは空です。上記のcatコマンドはshでは機能しますが、kshでは機能しません。
-size +0
とfindを使用して機能しました。バッファについて何かをもう一度示していますか?スクリプトは、findコマンドでゼロのファイルサイズを無視することによって機能しました。 (-サイズ+0)
cat `find /home/peter/databases -name "cells.txt" -size +0`
私は他の解決策にも同意します。しかし、私の質問は、kshが猫を処理できない理由を見つけることだったので、バッファーサイズ(バッククォートの出力)が原因でしたので、私は答えを投稿しています。 @wurtel:ありがとう。あなたの提案は問題を解決しました。
代替ソリューションとしてこれを試してください。ファイルが見つかった場合にのみcat
が呼び出されます。
find /home/peter/databases -type f -name 'cells.txt' -exec cat {} +
(お使いのバージョンのfind
が末尾の+
を理解できない場合は、2文字の\;
に置き換えてください)