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

Запуск скрипта 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

Читайте также:  Как починить лодку вилли stardew valley

Теперь вы можете выполнить:

Это был первый способ вызвать скрипт, но есть еще один — мы можем запустить оболочку и сразу же передать ей скрипт, который нужно выполнить. Вы могли редко видеть такой способ с bash, но он довольно часто используется для скриптов php или python. Запустим так наш скрипт:

А если нам нужно запустить скрипт на php, то выполните:

Вот так все просто здесь работает. Так можно запустить скрипт как фоновый процесс, используйте символ &:

Даже запустить процесс linux не так сложно.

Выводы

Как видите, запуск скрипта sh в linux — это довольно простая задача, даже если вы еще плохо знакомы с терминалом. Существует действительно много скриптов и некоторые из них вам возможно придется выполнять. Если у вас остались вопросы, спрашивайте в комментариях!

Источник

Linux проблема с запуском скриптов sh

Текст ошибки при запуске:

Скрипт просто не запускается. Хочу узнать как исправить данную ошибку. Скачал игрушку, скинул в папку и запускаю скрипт. Он ругается. В гугле найти решение ошибки не смог. В этом деле я профан, по этому прошу помощи. При запуске #./dod.sh ничего не происходит При запуске #bash ./dod.sh тоже.

3 ответа 3

Для начала: не надо работать от рута. Создайте пользователя. Это будет правильно.
Потом посмотрите в каких строках ошибку выдает. Если приглядеться — то это все строки с if.
Соответственно башу не нравится сравнение:

и аналогичные. Насколько известно мне — сравнения происходят в баше:

Если не поможет — попробуйте по совету Александра Блинова — попробуйте указать когда запускаете:

Вангую, конечно. Но, вероятно, вы запускаете скрипт #sh ./dod.sh

Нужно запускать просто #./dod.sh либо #bash ./dod.sh

Сейчас, пожалуй, глупый вопрос будет. А Вы не забыли сделать chmod?

Код скрипта в вопросе абсолютно работоспособен (в интерпретаторе bash).

Внимательно проверьте (например, командой cat -n dod.sh | grep 16 | hd (или чем-нибудь аналогичным на Ваш выбор)) символы вокруг [ в строках на которые у Вас идет ругань, в самом ли деле это пробелы.

Возможно также (судя по характерной диагностике — [: Linux: unexpected operator ), что у Вас /bin/bash либо является ссылкой на dash, либо просто заменен на эту команду, которая выдает именно такую диагностику для неизвестной ей операции == .

Источник

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

В данной статье пойдет речь о том, как запускать сценарии командной оболочки (shell скрипты) в Ubuntu.

Что такое sh скрипт

Если кратко, sh скрипт — это файл, в котором описываются последовательно выполняемые команды.

Подробнее о сценарии командной оболочки можно прочесть в Wikipedia: Сценарий командной строки.

В такой файл мы можем вписать все команды, которые выполняем в терминале, то есть, которые исполняются командной оболочкой нашей системы.

Стоит упомянуть, что расширение .sh вовсе не обязательно, так как в Unix-подобных операционных системах нет требований к расширению имени файла, однако для скриптов командной оболочки выделено расширение .sh.

Как запускать sh скрипты в командной строке.

Запускать скрипты sh из командной строки легко.

1. Сделать файл скрипта исполняемым (если он еще таковым не является):

2. Запускаем скрипт, просто указав путь до него:

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

Иногда требуются права суперпользователя для запуска скрипта, тогда просто перед скриптом пишем команду sudo:

Можно запускать скрипты, непосредственно указывая интерпретатор: sh, bash и другие:

Но не советую так делать на постоянной основе.

Как запустить sh в файловом менеджере Ubuntu (Nautilus)

Читайте также:  Не работает lego education wedo

В файловом менеджере (Nautilus) Ubuntu sh скрипты запускаются двойным кликом по файлу:

Нужно убедиться, что в свойствах файла на вкладке «Права» установлена галочка «Выполнение» — «Разрешить выполнение файла как программы»:

Решаем проблему файлового менеджера Ubuntu при запуске скриптов sh

По умолчанию, после установки системы Ubuntu, если вы попытаетесь выполнить скрипт двойным кликом, то файл у вас откроется в текстовом редакторе:

Чтобы решить эту проблему, открываем «Параметры», переходим на вкладку «Поведение», в пункте «Исполняемые текстовые файлы» выбираем «Спросить что делать» или «Запустить»:

Разница их в том, что при выборе пункта «Спросить что делать», будет выбор в каком режиме запустить скрипт:

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

Как сделать так, чтобы терминал не закрывался после завершения sh скрипта в Ubuntu.

Когда мы запускам какой-либо скрипт из файлового менеджера, выбрав «Запустить в терминале»:

У нас откроется окно терминала. Но после выполнения всех команд, описанных в sh скрипте, окно терминала закроется. В результате, мы не может просмотреть лог (историю) выполнения.

Чтобы решить эту проблему, переходим в «Параметры» терминала. В параметрах выбираем наш профиль и переходим на вкладку «Команда», в пункте «При выходе из команды» выбираем «Держать терминал открытым»:

Источник

Запуск Bash в деталях

Если вы нашли эту страницу в поиске, то наверняка пытаетесь решить какую-то проблему с запуском bash.

Возможно, в вашем окружении bash не устанавливается переменная среды и вы не понимаете, почему. Возможно, вы засунули что-то в различные загрузочные файлы bash или в профили, или во все файлы наугад, пока это не сработало.

В любом случае, смысл этой заметки — как можно проще изложить процедуру запуска bash, чтобы вы могли справиться с проблемами.

Диаграмма

Эта блок-схема обобщает все процессы при запуске bash.

Теперь подробнее рассмотрим каждую часть.

Login Shell?

Сперва нужно выбрать, находитесь вы в командной оболочке входа (login shell) или нет.

Оболочка входа — это первая оболочка, в которую вы попадаете при входе в систему для интерактивного сеанса. Оболочка входа не требует ввода имени пользователя и пароля. Вы можете форсировать запуск оболочки входа, добавив флаг —login при вызове bash , например:

Оболочка входа настраивает базовую среду при первом запуске оболочки bash.

Интерактивный?

Затем вы определяете, является оболочка интерактивной или нет.

Это можно проверить по наличию переменной PS1 (она устанавливает функцию ввода команд):

Или посмотреть, установлен ли параметр -i , с помощью специальной переменной дефиса — в bash, например:

Если в выдаче есть символ i , то оболочка является интерактивной.

В оболочке входа?

Если вы находитесь в оболочке входа, то bash ищет файл /etc/profile и запускает, если он существует.

Затем ищет любой из этих трёх файлов в следующем порядке:

Когда находит один, то запускает его и пропускает другие.

В интерактивной оболочке?

Если вы находитесь в интерактивной оболочке без входа в систему (non-login shell), предполагается, что вы уже побывали в оболочке входа, окружение настроено и будет унаследовано.

В этом случае выполняются по порядку следующие два файла, если они существуют:

Ни один вариант?

Если вы не находитесь ни в оболочке входа, ни в интерактивной оболочке, то ваше окружение действительно будет пустым. Это вызывает большую путаницу (см. ниже о заданиях cron).

Читайте также:  Не работает ашдимиай вход

В этом случае bash смотрит на переменную BASH_ENV вашей среды и выполняет соответствующий файл, который там указан.

Типичные трудности и эмпирические правила

Задания cron

У меня в 95% случаев отладка запуска bash связана с тем, что задание cron работает не так, как ожидалось.

Эта проклятая задача работает нормально, когда я запускаю её в командной строке, но фейлится при запуске в crontab.

Здесь две причины:

  • Задания cron не являются интерактивными.
  • В отличие от скриптов в командной строке, задания cron не наследуют среду оболочки.

Обычно вы не замечаете или не заботитесь о том, что скрипт оболочки не является интерактивным, потому что среда наследуется от интерактивной оболочки. Это означает, что все PATH и alias настроены так, как вы ожидаете.

Вот почему зачастую приходится установить конкретный PATH для задачи cron, как здесь:

Скрипты, вызывающие друг друга

Обычно так происходит, когда кто-то пытался исправить какую-то ошибку и вроде бы всё заработало. К сожалению, когда нужно разделить эти разные типы сессий, то возникают новые проблемы.

Образ Docker в песочнице

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

Для принудительного логина и имитации оболочки входа:

Для проверки набора переменных BASH_ENV :

Для отладки crontab каждую минуту выполнятся простой скрипт (в /root/ascript ):

Источник

Как запустить наши скрипты при запуске Ubuntu

Одним из положительных моментов в Ubuntu является то, что позволяет нам создавать и запускать собственные скрипты, которые помогают нам улучшать функциональность системы, сценарии, которые легко создавать и которые мы можем запустить в любое время во время сеанса или просто в начале любого сеанса.

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

Как вставить скрипты в нашу Ubuntu

Первый и самый простой способ — это включение скрипта в наш логин. с помощью графического приложения. Для этого мы собираемся Система–> Настройки–> Приложения при запуске и в Добавить программу при запуске, поле команды мы заполняем его созданным нами скриптом. Сохраняем все и при перезагрузке системы Ubuntu загрузит наши скрипты.

Второй метод, который мы можем использовать в нашем Ubuntu, немного сложнее, но выполнить эти шаги легко. Сначала нам нужно создать наш скрипт. После создания скрипта мы копируем его и вставляем в папку /etc/init.d (для этого мы должны быть пользователем root). После того, как мы вставили этот скрипт, мы должны дайте им разрешение на запуск этого файла. Для этого нужно открыть терминал в папке и ввести следующее:

Теперь у нас есть готовый сценарий, и нам нужно только сказать системе, чтобы она прочитала и выполнила сценарий, который мы вставили в папку, для этого мы выполняем следующую команду в терминале:

Это сделает система включает скрипт при запуске системы и для каждого пользователя в этой системе не имеет значения, является ли он системным администратором или простым пользователем. Как вы можете видеть, что это простая и простая операция, не так ли?

Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Полный путь к статье: Убунлог » Ubuntu » Как запустить наши скрипты при запуске Ubuntu

Источник

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