誰かが私に次のことを説明できますか?
$ ls -ld /temp/sit/build/
dr-xr-s--- 3 asdf qwer 4096 Jan 31 2012 /temp/sit/build/
$ ls -ld /temp/sit/build/*
ls: /temp/sit/build/*: Permission denied
ですから、ここではアスタリスクを使用できません。私はSudoコマンドで試してみましたが、「アクセスが拒否されました」ではなく「そのようなファイルはありません」というエラーが表示されます...
Sudo ls -l /temp/sit/build/*
ls: /temp/sit/build/batch*: No such file or directory
しかし、*を使用しない場合、最終的には機能します
Sudo ls -l /temp/sit/build/
total 4
dr-xr-s--- 11 asdf qwer 4096 Oct 3 23:31 file
*
ワイルドカードの展開を行っているシェルは、入力したシェルです。シェルにディレクトリ内のファイルのリストを読み取る権限がある場合、シェルは/temp/sit/build/*
を/temp/sit/build/file
に展開し、Sudo
を引数ls
、-l
および/temp/sit/build/file
で実行します。シェルが/temp/sit/build/*
に一致するものを見つけられない場合(一致がないため、またはシェルに一致を表示する権限がないため)、パターンをそのままにし、Sudo
が次のように呼び出されます引数ls
、-l
および/temp/sit/build/*
。
/temp/sit/build/*
というファイルはないため、ls
コマンドは、その名前を渡した場合に文句を言います。 ls
はワイルドカードを展開しないことを思い出してください。これはシェルの仕事です。
読み取り権限のないディレクトリでワイルドカード展開を行う場合は、Sudo
を呼び出すシェルではなく、Sudo
で開始されるシェルで展開を行う必要があります。 Sudo
はシェルを自動的に起動しません。明示的に実行する必要があります。
Sudo sh -c 'ls -l /temp/sit/build/*'
ここではもちろん、代わりにSudo ls -l /temp/sit/build/
を使用できますが、それは他のパターンに一般化されません。
まれなケースですが、シェルのグロビングを無効にしていないことを再確認する必要があり、No such file or directory
ワイルドカード(*
)。
例えば:
$ ls /tmp/sit/build/*
/tmp/sit/build/file
$ set -f
$ ls /tmp/sit/build/*
ls: cannot access /tmp/sit/build/*: No such file or directory
$ set +f
$ ls /tmp/sit/build/*
/tmp/sit/build/file
小切手 help set
詳細については。