Почему не запускается скрипт, ошибка «bash: ./….sh: Отказано в доступе» (РЕШЕНО)
Иногда при запуске .sh файла, который представляет собой Bash скрипт, может возникнуть ошибка. К примеру, запускается скрипт в файле check-aur.sh:
Подобную ошибку можно исправить, если перед запускаемым скриптом указать желаемый интерпретатор, то есть bash:
Почему возникает ошибка «bash: ./….sh: Отказано в доступе»
Вы могли заметить, что некоторые файлы можно запустить и без указания bash в начале команды. Для этого необходимо соблюдение двух условий:
- в разрешения файла должно быть разрешение на выполнение
- в самом файле вверху должен быть шебанг
Проверить, есть ли разрешения на исполнение файла можно командой ls:
Должно быть что-то вроде такого (должны быть x):
Чтобы установить права на выполнение файла выполните команду вида:
Ещё одна возможная причина, в начале файла *.sh пропущен шебанг:
Строка шебанга имеет следующий формат:
interpreter должен быть абсолютным путём к исполняемому файлу программы (если интерпретатором является скрипт, он тоже должен начинаться с шебанга). Необязательный optional-arg должен иметь формат единственного аргумента (по причинам переносимости он не должен содержать пробелы). Пробел после #! является опциональным.
Источник
Не запускаются файлы .sh
Ubuntu Gnome 16.04.1 x86-64. Собственно, проблема. Поставил в наутилусе настройку чтобы спрашивал открыть текст или запустить, запускаю — ноль реакции. На Линукс минт циннамоне работало изначально, тут нет. Как можно решить?
А что в файле? Какой вывод ls -la?
ls -la показывает, что всё root. Хочу уточнить, что не работает не один файл, а все .sh, что я пробовал
а почему всё рут? из терминала работает вообще? Под каким юзером запускаешь? и +х есть?
Ну раз все root — значит, все заrootись! 🙂
А права на файл какие все же?
У него все рут, в этом случае обычный пользун ничего не сможет сделать с этим файлом, кроме как прочитать.
Тогда зарутиться и заюзать chown и можно применять chmod.
Вопрос только в том, есть ли у него доступ к руту.
Если это скрипт из какого-то системного пакета — то так лучше не делать. Хотя, кто его знает, инфы то нет 🙂
Как вариант — запусти скрипт из консоли и посмотри, что пишет. Авось, запускаемой программе зависимостей не хватает.
Согласен, всё зависит от конкретной ситуации.
Да, дейстительно, пишет что не хватает какой-то библиотеки. Сейчас попробую установить
Источник
Запуск скрипта sh в Linux
Вся сила Linux в использовании терминала. Это такая командная оболочка, где вы можете выполнять различные команды, которые будут быстро и эффективно выполнять различные действия. Ну впрочем, вы наверное это уже знаете. Для Linux было создано множество скриптов, которые выполняются в различных командных оболочках. Это очень удобно, вы просто объединяете несколько команд, которые выполняют определенное действие, а затем выполняете их одной командой или даже с помощью ярлыка.
Но у новичков может возникнуть вопрос — как запустить скрипт в Linux, что для этого нужно сделать, что будет происходить и какие команды нужно выполнить. Но сначала нужно рассмотреть как работают скрипты и что такое исполняемость.
Как работают скрипты
В Linux почти не используется расширение файла для опережения его типа на системном уровне. Это могут делать файловые менеджеры и то не всегда. Вместо этого, используются сигнатуры начала файла и специальные флаги. Система считает исполняемыми только те файлы, которым присвоен атрибут исполняемости.
Теперь о том, как работают скрипты. Это обычные файлы, которые содержат текст. Но если для них установлен атрибут исполняемости, то для их открытия используется специальная программа — интерпретатор, например, оболочка bash. А уже интерпретатор читает последовательно строку за строкой и выполняет все команды, которые содержатся в файле. У нас есть несколько способов выполнить запуск скрипта linux. Мы можем запустить его как любую другую программу через терминал или же запустить оболочку и сообщить ей какой файл нужно выполнять. В этом случае не нужно даже флага исполняемости.
Запуск скрипта sh в Linux
Сначала рассмотрим пример небольшого sh скрипта:
#!/bin/bash
echo «Hello world»
Вторая строка — это действие, которое выполняет скрипт, но нас больше всего интересует первая — это оболочка, с помощью которого его нужно выполнить. Это может быть не только /bin/bash, но и /bin/sh, и даже /usr/bin/python или /usr/bin/php. Также часто встречается ситуация, что путь к исполняемому файлу оболочки получают с помощью утилиты env: /usr/bin/env php и так далее. Чтобы выполнить скрипт в указанной оболочке, нужно установить для него флаг исполняемости:
chmod ugo+x script.sh
Мы разрешаем выполнять запуск sh linux всем категориям пользователей — владельцу, группе файла и остальным. Следующий важный момент — это то место где находится скрипт, если вы просто наберете script.sh, то поиск будет выполнен только глобально, в каталогах, которые записаны в переменную PATH и даже если вы находитесь сейчас в той папке где находится скрипт, то он не будет найден. К нему нужно указывать полный путь, например, для той же текущей папки. Запуск скрипта sh в linux:
Или полный путь от корня:
Если вы не хотите писать полный путь к скрипту, это можно сделать, достаточно переместить скрипт в одну из папок, которые указаны в переменной PATH. Одна из них, которая предназначена для ручной установки программ — /usr/local/bin.
cp script.sh /usr/local/bin/script.sh
Теперь вы можете выполнить:
Это был первый способ вызвать скрипт, но есть еще один — мы можем запустить оболочку и сразу же передать ей скрипт, который нужно выполнить. Вы могли редко видеть такой способ с bash, но он довольно часто используется для скриптов php или python. Запустим так наш скрипт:
А если нам нужно запустить скрипт на php, то выполните:
Вот так все просто здесь работает. Так можно запустить скрипт как фоновый процесс, используйте символ &:
Даже запустить процесс linux не так сложно.
Выводы
Как видите, запуск скрипта sh в linux — это довольно простая задача, даже если вы еще плохо знакомы с терминалом. Существует действительно много скриптов и некоторые из них вам возможно придется выполнять. Если у вас остались вопросы, спрашивайте в комментариях!

Источник
Linux не открывает скрипт
В данной статье пойдет речь о том, как запускать сценарии командной оболочки (shell скрипты) в Ubuntu.
Что такое sh скрипт
Если кратко, sh скрипт — это файл, в котором описываются последовательно выполняемые команды.
Подробнее о сценарии командной оболочки можно прочесть в Wikipedia: Сценарий командной строки.
В такой файл мы можем вписать все команды, которые выполняем в терминале, то есть, которые исполняются командной оболочкой нашей системы.
Стоит упомянуть, что расширение .sh вовсе не обязательно, так как в Unix-подобных операционных системах нет требований к расширению имени файла, однако для скриптов командной оболочки выделено расширение .sh.
Как запускать sh скрипты в командной строке.
Запускать скрипты sh из командной строки легко.
1. Сделать файл скрипта исполняемым (если он еще таковым не является):
2. Запускаем скрипт, просто указав путь до него:
Если скрипт находится в текущей директории, то нужно указать ./ перед именем файла скрипта:
Иногда требуются права суперпользователя для запуска скрипта, тогда просто перед скриптом пишем команду sudo:
Можно запускать скрипты, непосредственно указывая интерпретатор: sh, bash и другие:
Но не советую так делать на постоянной основе.
Как запустить sh в файловом менеджере Ubuntu (Nautilus)
В файловом менеджере (Nautilus) Ubuntu sh скрипты запускаются двойным кликом по файлу:
Нужно убедиться, что в свойствах файла на вкладке «Права» установлена галочка «Выполнение» — «Разрешить выполнение файла как программы»:
Решаем проблему файлового менеджера Ubuntu при запуске скриптов sh
По умолчанию, после установки системы Ubuntu, если вы попытаетесь выполнить скрипт двойным кликом, то файл у вас откроется в текстовом редакторе:
Чтобы решить эту проблему, открываем «Параметры», переходим на вкладку «Поведение», в пункте «Исполняемые текстовые файлы» выбираем «Спросить что делать» или «Запустить»:
Разница их в том, что при выборе пункта «Спросить что делать», будет выбор в каком режиме запустить скрипт:
Для меня это наиболее удобный пункт, так как скрипт можно запустить в терминале, в графическом режиме или отредактировать в текстовом редакторе.
Как сделать так, чтобы терминал не закрывался после завершения sh скрипта в Ubuntu.
Когда мы запускам какой-либо скрипт из файлового менеджера, выбрав «Запустить в терминале»:
У нас откроется окно терминала. Но после выполнения всех команд, описанных в sh скрипте, окно терминала закроется. В результате, мы не может просмотреть лог (историю) выполнения.
Чтобы решить эту проблему, переходим в «Параметры» терминала. В параметрах выбираем наш профиль и переходим на вкладку «Команда», в пункте «При выходе из команды» выбираем «Держать терминал открытым»:
Источник
Как запустить sh скрипты в Linux?
Запускаемость в линукс это атрибут, по этому ты можешь его установить или нет, и делается это через chmod
Второй вариан запустить сам интерпретатор и подать на него файл
Какой по вашему тут еще может быть третий вариант ?
если вы делаете это на компе руководителя то можно запускать команды по удаленке или просто по ssh
1. положить все скрипты в одну папку и сделать доя нее -R +x
2. положить все файлы начальника на файловую систему где для nix все файлы всегда +х (как вариант smb)
ps: решение без задачи
Нужно просто осознать, что в Linux не существует ассоциаций файлов по расширениям.
Расширение для Линукса — просто часть файла после последней точки, система никаких действий к этому не привязывает.
Поэтому единственный способ делать .sh файлы исполняемыми — ставить на них флаг executable через
chmod +x file.sh
Другой вариант — запускать сам баш с передачей ему файла как аргумент (потому что бинарник bash-а уже с executable).
bash file.sh
whereis bash
bash: /usr/lib/bash /bin/bash /usr/share/bash /usr/share/man/man1/bash.1.xz /usr/share/info/bash.info.xz
./script.sh
bash: ./script.sh: Отказано в доступе
А код такой
#!/bin/bash
echo «Hello world»
Источник