$ sudo -iu abc ls -ltr /sites/servers/server_instance/logs/access*
ls: cannot access /sites/servers/server_instance/logs/access*: No such file or directory
$ sudo -iu abc ls -ltr /sites/servers/server_instance/logs/
total 594812
-rwxrwxrwx 1 abc abc 45 Mar 21 12:42 old.log
-rwxrwxrwx 1 abc abc 304537970 Mar 24 12:45 console.log
-rwxrwxrwx 1 abc abc 304537970 Mar 24 13:20 access_nginx.log
Кто-либо может объяснить, почему это происходит? Я застреваю на сценарии из-за этого.
Одна возможность состоит в том, что у Вас нет полномочий получить доступ к одному или нескольким каталогов в том пути (/sites/servers/server_instance/logs
). Подстановочное расширение выполняется Вашей оболочкой, и затем разобранные контуры передаются эти sudo
команда.
, Если бы у Вашего пользователя нет полномочий, расширение не работало бы в первой команде. Это было бы выполнено как есть (ls -ltr /sites/servers/server_instance/logs/access*
), и нет файла, буквально названного access*
). Если abc
действительно будет иметь необходимые полномочия для всех каталогов в пути, то вторая команда, которая не имела никаких подстановочных знаков, будет нетронутой Вашей оболочкой, и она хорошо работала бы.
$ sudo namei -lx foo/bar/baz
f: foo/bar/baz
drwxr-xr-x muru muru foo
drwx------ test test bar
drwxr-xr-x muru muru baz
$ sudo ls foo/bar/b*
ls: cannot access 'foo/bar/b*': No such file or directory
$ sudo -u test ls foo/bar/
baz
У Вас может быть отключенный globbing.
Ищут что-то как set -f
или set -o noglob
перед теми строками в сценарии, или если в интерактивной оболочке работает echo $-
; если существует f
в выводе, globbing отключен:
$ echo $-
fhimBH
Для фиксации этого удалите set -f
или set -o noglob
из сценария, или если в интерактивной оболочке работает set +f
или set +o noglob
:
$ set -f
$ echo $-
fhimBH
$ ls access*
ls: cannot access access*: No such file or directory
$ set +f
$ echo $-
himBH
$ ls access*
access