Когда я пытаюсь бежать, у ./script.sh
меня получается, Permission denied
но когда я бегу, bash script.sh
все нормально.
Что я сделал не так?
bash
shell-script
permissions
mount
Петр Стапп
источник
источник
getfacl script.sh
?Ответы:
Неверные разрешения POSIX
Это означает, что для вас не установлен бит разрешения на выполнение
script.sh
. При запускеbash script.sh
вам нужно только разрешение на чтениеscript.sh
. См. В чем разница между запуском «bash script.sh» и «./script.sh»? для получения дополнительной информации.Вы можете проверить это, запустив
ls -l script.sh
.Возможно, вам даже не нужно начинать новый процесс Bash. Во многих случаях вы можете просто запустить
source script.sh
или. script.sh
запустить команды сценария в текущей интерактивной оболочке. Возможно, вы захотите запустить новый процесс Bash, если скрипт изменяет текущий каталог или иным образом изменяет среду текущего процесса.Списки контроля доступа
Если биты разрешения POSIX установлены правильно, возможно, был настроен список контроля доступа (ACL), чтобы предотвратить выполнение файла вами или вашей группой. Например, разрешения POSIX могут указывать на то, что сценарий тестовой оболочки является исполняемым.
Однако попытка выполнить файл приводит к:
Команда
getfacl
показывает причину, по которой:В этом случае моя основная группа
domain users
имеет разрешения на выполнение, отозванные ограничением ACLsudo setfacl -m 'g:domain\040users:rw-' t.sh
. Это ограничение может быть снято с помощью одной из следующих команд:Видеть:
Файловая система смонтирована с опцией noexec
Наконец, причина в этом конкретном случае невозможности запустить скрипт заключается в том, что файловая система, в которой находится скрипт, была смонтирована вместе с
noexec
опцией. Этот параметр переопределяет разрешения POSIX, чтобы предотвратить выполнение любого файла в этой файловой системе.Это можно проверить, выполнив
mount
список всех смонтированных файловых систем; параметры монтирования указаны в скобках в записи, соответствующей файловой системе, напримерВы можете переместить скрипт в другую смонтированную файловую систему или перемонтировать файловую систему, разрешив выполнение:
Примечание. Я использовал
/tmp
этот пример в качестве примера, поскольку существуют веские причины для обеспечения/tmp
монтирования с помощьюnoexec,nodev,nosuid
набора параметров.источник
Пытаться
chmod 755 script.sh
это сделает файл исполняемым. Тогда попробуй,
./script.sh
Надеюсь, это сработает.
источник
На моем win7 с админом работает cmd; У меня есть файлы .sh, связанные с cygwin64 / bin / bash, но они были заблокированы cmd. Ни одно из приведенных выше предложений не помогло (chmod, setfacl, mount).
Решение, приведенное ниже, сработало: это acl-fixer кувалды администратора всякий раз, когда папки / файлы становятся недоступными для администратора на win7, что часто бывает):
источник