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
最初のケース:
アクセス権がある場合は shell(*)
/var/solr/data/new_core/_default/*
がcentos
。/var/solr/data/new_core/_default/*
次に、最初の場合のようにコマンドを展開します。には*
ファイルやディレクトリが/var/solr/data/new_core/_default/
ないのでno match found
。
2番目のケースでは、lsはファイルを見つけてリストします。
(*)これはFilename Expansion
zshの拡張です(参考資料を参照man zshexpn
)。
ファイル名の生成
単語に「*」文字の1つが引用符で囲まれていないインスタンスとして含まれている場合...
単語は、パターンに一致するソートされたファイル名のリストに置き換えられます。
centos
以前と同様に、sudo
zshはdir(たとえばfile conf
)にアクセスできないためno match found
。