Оболочка, которая выполняет расширение *
подстановочного знака, является оболочкой, в которой вы ее набираете. Если оболочка имеет разрешения на чтение списка файлов в каталоге, то он расширяется /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/
вместо этого, но это не распространяется на другие шаблоны.
Жиль "ТАК - перестань быть злым"
источник