Не работает скрипт linux

Почему не запускается скрипт, ошибка «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.
Вопрос только в том, есть ли у него доступ к руту.

Если это скрипт из какого-то системного пакета — то так лучше не делать. Хотя, кто его знает, инфы то нет 🙂

Как вариант — запусти скрипт из консоли и посмотри, что пишет. Авось, запускаемой программе зависимостей не хватает.

Читайте также:  Установка драйверов xiaomi windows 10

Согласен, всё зависит от конкретной ситуации.

Да, дейстительно, пишет что не хватает какой-то библиотеки. Сейчас попробую установить

Источник

Запуск скрипта 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 — это довольно простая задача, даже если вы еще плохо знакомы с терминалом. Существует действительно много скриптов и некоторые из них вам возможно придется выполнять. Если у вас остались вопросы, спрашивайте в комментариях!

Источник

Почему не запускается cron скрипт?

Помогите неопытному. Операционная система CentOS 6.3. Пытаюсь настроить бэкап папки и базы данных через rsync. Скрипты через консоль запускаются нормально, все работает, крон ошибок при сохранении не выдает, просто пишет «installing new crontab». Если я все правильно понимаю, то вроде все правильно. Но почему-то ничего не работает. Права на папку где лежат скрипты 777.

Я уже по всякому попробовал и /bin/bash в crontab убирал, поскольку как я прочитал, если в начале скрипта стоит #!/bin/bash , то это не нужно.

  • Вопрос задан более трёх лет назад
  • 41425 просмотров

Все нашел ответ на свой вопрос:

1) Кронтаб нужно запускать так: sudo crontab -e — это нужно чтобы cron запускал скрипты из под root.
2) Инструкции для cron должны быть такими. Нужно обязательно писать bash перед указанием пути к скрипту. После указания пути к скрипту дописать >/dev/null 2>&1
Пример:

3) Сами скрипты действительно должны быть лишены sudo, так как и так запускаются из под пользователя root.
Пример:

Можете объяснить что значит: >/dev/null 2>&1
У меня прописано сейчас вот так:
00 16,18,20,22 * * * garanty /home/garanty/www/garancy.finexpert.pro/ftpset.sh 2>/home/garanty/www/garancy.finexpert.pro/tmp/logscron.txt

Читайте также:  Microsoft диск восстановления windows 10

Не запускается, хотя в логах пишет, что все нормально.

2>/home/garanty/www/garancy.finexpert.pro/tmp/logscron.txt — эта штука должна записывать в файл logscron.txt ошибки если они будут?

> Можете объяснить что значит: >/dev/null 2>&1
stdout — в /dev/null, stderr — туда же, куда stdout

Источник

В Linux Mint 14 запуск скрипта из Startup Applications не работает, но из терминала работает

Я создал скрипт для настройки планшета Intuos в начале сеанса:

который я сохранил как

/bin/.wacomsetup.sh запустив chmod a+x

/bin/.wacomsetup.sh . Проверка свойств показывает, что это разрешено запускать как программу, но моя учетная запись пользователя может только чтение / запись в файл.

Я подтвердил, что он работает, когда я запускаю его из терминала, используя sh

/bin/.wacomsetup.sh , но когда я указываю путь в качестве записи команды в новой записи в Startup Applications (это относится к Cinnamon?), Он не запускает скрипт после входа в систему / перезапуска (я должен запустить его вручную).

Изменить программу запуска:
Название: Setup Wacom Intuos
Команда: sh

/bin/.wacomsetup.sh
Комментарий: ksdfk

Существуют ли другие разрешения, которые необходимо применить к сценарию, чтобы он мог запускаться при запуске таким образом?

Спасибо
(Я был бы признателен, если бы кто-то мог пометить этот вопрос более подходящим образом, если есть лучшие теги.)

2 ответа 2

Несколько вещей, чтобы попробовать:

» в пути в Startup Applications абсолютным путем к вашей домашней папке (например, /home/whateveryourusernameis )

Удалите sh в пути, поскольку это не необходимо; до тех пор, пока скрипт является исполняемым (с битом «x», установленным в DACL для вас), символ #!/bin/sh в начале сценария обнаружит, что это сценарий оболочки, и автоматически запустит интерпретатор оболочки для выполнения команд.

Попробуйте переместить сценарий в /usr/bin что делает его мир для чтения и выполнения, а также настройки Command: в приложениях Startup просто wacomsetup.sh Хотя я сомневаюсь, что этот шаг необходим, потому что запускаемые приложения запускаются под вашей учетной записью после входа в систему, и Xorg уже должен быть запущен .

Просто чтобы убедиться, что проблема не в том, что скрипт выполняется, а команды по каким-то причинам не выполняются: вверху скрипта под #!/bin/sh line, попробуйте добавить: echo scripted >

/scripted (измените часть «scripted», если у вас уже есть файл с таким именем для какого-либо другого использования). Затем убедитесь, что файл не существует, затем выйдите из системы / войдите в систему и посмотрите, пишет ли он этот файл. Если нет, скрипт даже не запускается. Если вы действительно видите этот файл, значит, скрипт выполняется, но вызовы xsetwacom не выполняются.

Источник

Оцените статью