У меня очень странная ошибка при попытке сделать скрипт вызываемым. У меня есть каталог скриптов в / srv / projectname / scripts, где я храню известные вам скрипты, которые будут называться заданиями cron для разных проектов. Я пытаюсь добавить новый и вижу очень странное поведение. При отладке я воспроизвожу его с помощью этого набора команд
из / srv / projectname / scripts создать файл создать файл
vi helloworld.sh
вставить текст точно:
#!/usr/bin/env bash
echo "Hello World!"
Сделайте скрипт исполняемым и попробуйте вызвать его:
chmod +x helloworld.sh
./helloworld.sh
, что дает:
-bash: ./helloworld.sh: Permission denied
Убедитесь, что нет ошибки кода:
bash helloworld.sh
Что дает:
Hello World!
Скопируйте сценарий на дом и назовите его:
cp helloworld.sh ~/helloword.sh
~/helloword.sh
Что дает:
Hello World!
Я понятия не имею, что происходит на. Я перепробовал множество вариантов, в которых я указываю полный путь, ту же ошибку, или если я sudo, который не выдает ошибку, но также не выводит «Hello World!».
Другие подробности: Работа на: Ubuntu 12.04.4 LTS Я также заметил, что не могу завершить табуляции до полного имени скрипта, который выдает мне эту ошибку, но я могу это сделать, как только переместил его. Каталог / srv / projectname является git-репозиторием, но этот скрипт еще не добавлен в него, потому что я обычно делаю это только один раз, когда он работает.
Строки ls -l для каталога script и scripts:
-rwxrwxr-x 1 ubuntu ubuntu 41 Apr 21 20:25 helloworld.sh
drwxrwxr-x 3 ubuntu ubuntu 4096 Apr 21 20:25 scripts
соответственно
Любая помощь будет отличной.
РЕДАКТИРОВАТЬ: Жиль был ответ. Чтобы спасти любого, у кого есть эта проблема, поиск в Google.
sudo mount /srv/projectname/ -o remount
перезагружает отредактированный fstab, и все снова работает.
В полномочиях файла говорится, что это - исполняемый файл, все же файл не является исполняемым файлом. Существует три причины, почему это может произойти.
getfacl /path/to/file
. Дело обстоит не так здесь с тех пор ls -l
шоу, что нет никакого ACL на файле (был бы a +
в конце полномочий, например. -rwxr-xr-x+
).noexec
опция. Эта опция подразумевается при наличии users
в fstab
строка (если Вы хотите сделать файловую систему монтируемой пользователем и позволить пользователям выполнять файлы на нем, использовать noauto,users,exec
). Эта опция монтирования заставляет все регулярные файлы быть неисполняемым файлом независимо от своих полномочий./usr/bin/env
исполняемый файл так или иначе).Процессом устранения файл находится на объеме, смонтированном с noexec
опция.
Единственные обходные решения:
noexec
опция. Эта опция не имеет никаких последствий безопасности (в отличие от этого, nosuid
и nodev
, которые делают). Это главным образом полезно для файловых систем без понятия, выполняют полномочия, где Вы добираетесь для выбора между созданием всего исполняемого файла или ничего.bash helloworld.sh
. Это не выполняется helloworld.sh
, это выполняется /bin/bash
который читает из helloworld.sh
.