2017-03-07 2 views
0

ディレクトリaのすべてのファイルの総単語数を出力しようとしていますが、.shスクリプトを実行すると、find "$1"...に "find:command not found"ライン。なぜこれが起こっているのですか?これをどうやって解決しますか?ファンクションメソッドのfindコマンドが見つかりません

function count_files() { 
    find "$1" -type f -exec cat {} \+ | wc -w #outputs error here 
} 

density_a="$(count_files "a")" 
+1

スクリプトは人々が自分自身の変数名に小文字を使用することになっている理由である変数 'PATH'(上書きした後、通常、これは起こる - シェルに意味の変数をまたはOSがすべて大文字であるため、その名前空間を使用しないと競合が回避されます)。いずれにしても、問題のコードがスクリプト内の唯一のものであるときに問題を再現することをテストします。そのままではこれには影響がないので、http:// pubsの関連するPOSIX仕様を参照してください。上記の命名規則は、http://stackoverflow.com/help/mcve –

+0

に準拠していません。 opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html、段落4を参照してください。 –

+1

「function」キーワードは利点がありません。それを離れることを検討してください。 'count_files(){'、前に 'function'はありません。また、別の型として、 '+'をエスケープするためにバックスラッシュを使う必要はありません。他の型の 'find -exec'呼び出しで使われる'; 'とは違って、文字は引用符で囲まれていないと正規表現や構文ではありません。 –

答えて

0

そのスクリプトを実行しているユーザーのうち、そのパスにfindバイナリがない可能性があります。

findをfindバイナリへのフルパスで置き換えてみてください。 (これらのどちらの作業でも "which find"の出力を使用しない場合)。

/sbin/find "$1" -type f -exec cat {} \+ | wc -w #outputs error here 

または

/bin/find "$1" -type f -exec cat {} \+ | wc -w #outputs error here 
+0

うーん、いずれも動作しません。私はスクリプトを実行しているユーザーであり、別のスクリプトでは 'find。タイプf | wc -l'(関数内ではない)は完全に細かい。スクリプトの一番上にあるshbangは '#!/ usr/bin/env bash'です – 14wml

+0

findコマンドをローカルで実行し、スクリプトに正確なコマンドをコピー/ペーストしても失敗しますか? – SuperTetelman

+1

コマンドラインで動作し、スクリプトで失敗する可能性があります。私はドーナツにドルを賭けるでしょう。OPが実行しているスクリプトは、失敗しているポイントに達する前に 'for PATH in ... 'のようなことをしています(パスを完全に修飾しようとしています。問題の本当の原因を見つけて解決するのではなく、バンダイを適用しています)。 –

関連する問題