一致するものがありますが、なぜ「一致が見つかりません」というエラーが発生するのですか?

一致するものがありますが、なぜ「一致が見つかりません」というエラーが発生するのですか?
centos@ip-10-0-5-4 ~ $ sudo ls -l /var/solr/data/new_core/_default/*
zsh: no matches found: /var/solr/data/new_core/_default/*
centos@ip-10-0-5-4 ~ $ sudo ls -l /var/solr/data/new_core/_default/ 
total 4
drwxr-xr-x. 3 root root 4096 Mar 28 07:34 conf

答え1

*呼び出される前にシェルによって拡張されますsudo。ディレクトリへのアクセス権がない場合、zshシェルは「一致するエントリが見つかりません」というメッセージを表示します。 shellNOMATCHにシェルオプションが設定zshされていない場合、シェルはパターンを拡張せずに「対応するlsファイルまたはディレクトリがありません」エラーを生成します(ディレクトリに*リテラル名を持つエントリがない場合)。NOMATCHデフォルトで設定されている場合は呼び出されsudo lsません。

次のことができます。

sudo sh -c 'ls -l /var/solr/data/new_core/_default/*'

これにより、現在のシェルがrootとして実行したいコマンドラインを使用して拡張*および呼び出されるのを防ぎます。sh

答え2

最初のケース:

  1. アクセス権がある場合は shell(*)/var/solr/data/new_core/_default/*centos

  2. /var/solr/data/new_core/_default/*次に、最初の場合のようにコマンドを展開します。

  3. には*ファイルやディレクトリが/var/solr/data/new_core/_default/ないのでno match found

2番目のケースでは、lsはファイルを見つけてリストします。

(*)これはFilename Expansionzshの拡張です(参考資料を参照man zshexpn)。

ファイル名の生成

単語に「*」文字の1つが引用符で囲まれていないインスタンスとして含まれている場合...

単語は、パターンに一致するソートされたファイル名のリストに置き換えられます。

centos以前と同様に、sudozshはdir(たとえばfile conf)にアクセスできないためno match found

関連情報