Я создал скрипт оболочки, который удаляет дубликаты в заданном каталоге. Он печатает «Отказано в доступе», за которым следует имя файла, если определенный файл не может быть прочитан. Когда я пытаюсь запустить ./filename (имя файла оболочки) в определенном каталоге, все файлы распечатываются с «доступом запрещен» рядом с ним.

Разрешение дано:

drwxr-xr-x     .
drwx------ 24  ..
-rw-r--r--  1  file1.cpp
-rw-r--r--  1  file2.cpp
-rwxr-xr-x  1  file3.cpp
-rwxr-xr-x  1  file2.txt
-rw-r--r--  1  script

Вывод, когда я запускаю команду ./script в каталоге:

/file1.cpp: permission denied 
/file2.cpp: permission denied 
/file3.cpp: permission denied 
/file2.txt: permission denied 
/script.sh: permission denied

2 ответа2

1

Трудно сказать, не видя код, но ваш скрипт, вероятно, делает что-то вроде

cp "$file" "$dir/$file"

где $file установлен в file1.cpp а $dir в null.  Так оно и делает

cp file1.cpp /file1.cpp

и, конечно, у вас нет разрешения на создание /file1.cpp (т. е. на создание файлов в корневом каталоге).

Таким образом, решение было бы установить $dir .

0

Вы не можете предоставить права доступа к сценарию, только пользователям и группам.

Если пользователь, выполняющий скрипт, не имеет доступа к файлам, запустите скрипт как пользователь, имеющий доступ.

В каталоге выполните эти команды и добавьте вывод к вопросу:

id
ls -la

Затем запустите скрипт так, как вы его обычно выполняете, а также добавьте вывод этого скрипта.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .