it-swarm-ja.com

macOS High Sierra(10.3)-bash:find 。:コマンドが見つかりません

$ find . -name ‘*.blade.php’ -not -path ‘*/vendor/*’ | wc -l

私は数日前にこのコマンドを実行しましたが、すべてが世界に正しかったです。

今日それを実行すると、次のようになります。

-bash: find .: command not found

私が知っている私のシステムには何も変わっていません。クイック検索では、この問題に固有の情報は返されませんでした。他の誰かが質問を投稿するのに役立つかもしれないと思った。

これはどうしたの? :)

1
Josh Bruce

何が起こったのか完全にはわかりませんが、私はthink「find」と「。」の間に途切れのないスペースのようなものがあります。改行なしスペースは、通常のスペースと同じようにlookするユニコード文字ですが、テキスト行を折り返す有効な場所を示すことを目的としていません。しかし、それらは通常のスペースのように見えますが、シェルはそれらをどう処理するかを知らず、通常の文字のように扱います。この結果の1つは、コマンドとその引数の間の区切り文字としてそれらを認識しないことです。次に例を示します。

$ find . -name ‘*.blade.php’ -not -path ‘*/vendor/*’ | wc -l    # With normal space
       0
$ find . -name ‘*.blade.php’ -not -path ‘*/vendor/*’ | wc -l    # With nonbreaking space
-bash: find .: command not found
       0
$ find . -name ‘*.blade.php’ -not -path ‘*/vendor/*’ | wc -l    # With ALL nonbreaking spaces
-bash:  wc -l: command not found
-bash: find . -name ‘*.blade.php’ -not -path ‘*/vendor/*’ : No such file or directory

(パターンに一致するファイルがないため、カウントは0になります。)2番目のコマンドで発生しているのは、「find」の間に改行なしのスペース(MacではOption-Spaceと入力)があることです。および「。」なので、シェルは「find <nonbreakingspace>」を扱います。コマンドとして...認識されません。 3番目のコマンドでは、すべてのスペースを改行しないスペースに置き換えました。 「|」を認識しましたコマンド間の区切り文字として使用されますが、文字通り、行上の他のすべてのものはコマンド名の一部です。

コマンドが「検索」するというエラーメッセージ。何が起こっているのかについての景品は見つかりませんでした。空間のようなものと「」を扱っています。コマンドの一部として、そのようにエラーメッセージに表示されます。

ただし、混乱を招きます。そもそも、どのようにしてノーブレークスペースを確保したのかわかりません。 Notesとの間でコピーアンドペーストしても、変換は行われません。たぶんあなたは誤ってオプションをぶつけましたか?私は知らないよ。

ところで、これを編集しているときに別のことに気づきました。あなたが持っている一重引用符は、見た目は完全に良い引用符のようですが、改行しないスペースは、シェルによってそのように認識されません。これは私が知っているソースです:多くのコンテキストで、macOSはプレーンクォートをファンシータイプに自動「修正」します(「スマートクォート」と呼ばれる機能)。これは、スクリプトで大混乱を引き起こす傾向があります。 BBEdit の推奨事項を、入力内容を混乱させない優れたエディターとして投入し、スクリプト作成に適したものにします。無料ではありませんが、料金を支払わなくても、組み込みのエディターよりもスクリプト作成に適した制限付きモードで実行されます。

2
Gordon Davisson