не запускается скрипт sh linux
Не запускается скрипт sh
При использовании операционной системы Linux очень многие пользователи не пренебрегают такой возможностью системы, как написание собственных скриптов командной строки. Скрипты помогают оптимизировать работу с системой, внести долю автоматизации в рабочий процесс и их можно использовать для решения различных задач по администрированию системы. Но новичек в системе может столкнуться с тем, что его первый простенький скрипт почему-то не хочет исполняться.
В данной статье я приведу несколько распространенных элементарных ошибок с которыми сталкиваются новички.
Не указан интерпретатор
Первой строкой в скрипте традиционно указывается интерпретатор с помощью которого следует исполнять последующие команды. Выглядит это следующим образом:
Здесь может быть указан любой интерпретатор, хоть на PHP пиши скрипты:
но будь добр путь к нему указать.
Скрипту не дали право на исполнение
Второй частой проблемой с запуском скрипта оказывается отсутствие прав на исполнение. Это решается с помощью присвоения специального флага файлу командой chmod:
После этого скрипт можно запустить написав в терминале ./script_file находясь в том же каталоге, в котором лежит скрипт или указав до него необходимый путь.
Не указан путь к скрипту
Скрипт написан, интерпретатор указан, флаг +x установлен, а терминал все равно выдает «Нет такого файла или каталога»?
или указывай полный (можно и относительный) путь к нему:
Попытка обратиться к скрипту лишь по имени
Если находясь в одном каталоге со скриптом под названием script просто написать в терминале слово:
терминал будет не исполнять твой файл из текущего каталога, а искать одноименные команды. Для того чтобы запустить файл скрипта пиши его имя с указанием пути:
Для того, чтобы использовать скрипт без указания пути, просто как обычную команду можно положить его в каталог /bin или, что правильнее — /usr/bin.
Синтаксические или логические ошибки
В случае, если все вышеописанные проблемы исключены, то можно предположить, что в скрипте имеются ошибки в коде, в таком случае остается лишь еще раз тщательно перепроверить исходный код, проверить правильность написания всех команд и конструкций. Если скрипт скачан из сети, то обратиться за помощью с разъяснением непонятных его частей к поисковым системам.
Не запускается скрипт sh linux
В данной статье пойдет речь о том, как запускать сценарии командной оболочки (shell скрипты) в Ubuntu.
Что такое sh скрипт
Подробнее о сценарии командной оболочки можно прочесть в Wikipedia: Сценарий командной строки.
В такой файл мы можем вписать все команды, которые выполняем в терминале, то есть, которые исполняются командной оболочкой нашей системы.
Как запускать sh скрипты в командной строке.
Запускать скрипты sh из командной строки легко.
1. Сделать файл скрипта исполняемым (если он еще таковым не является):
2. Запускаем скрипт, просто указав путь до него:
Если скрипт находится в текущей директории, то нужно указать ./ перед именем файла скрипта:
Иногда требуются права суперпользователя для запуска скрипта, тогда просто перед скриптом пишем команду sudo:
Можно запускать скрипты, непосредственно указывая интерпретатор: sh, bash и другие:
Но не советую так делать на постоянной основе.
Как запустить sh в файловом менеджере Ubuntu (Nautilus)
В файловом менеджере (Nautilus) Ubuntu sh скрипты запускаются двойным кликом по файлу:
Решаем проблему файлового менеджера Ubuntu при запуске скриптов sh
По умолчанию, после установки системы Ubuntu, если вы попытаетесь выполнить скрипт двойным кликом, то файл у вас откроется в текстовом редакторе:
Чтобы решить эту проблему, открываем «Параметры», переходим на вкладку «Поведение», в пункте «Исполняемые текстовые файлы» выбираем «Спросить что делать» или «Запустить»:
Разница их в том, что при выборе пункта «Спросить что делать», будет выбор в каком режиме запустить скрипт:
Для меня это наиболее удобный пункт, так как скрипт можно запустить в терминале, в графическом режиме или отредактировать в текстовом редакторе.
Как сделать так, чтобы терминал не закрывался после завершения sh скрипта в Ubuntu.
Когда мы запускам какой-либо скрипт из файлового менеджера, выбрав «Запустить в терминале»:
У нас откроется окно терминала. Но после выполнения всех команд, описанных в sh скрипте, окно терминала закроется. В результате, мы не может просмотреть лог (историю) выполнения.
Чтобы решить эту проблему, переходим в «Параметры» терминала. В параметрах выбираем наш профиль и переходим на вкладку «Команда», в пункте «При выходе из команды» выбираем «Держать терминал открытым»:
Запуск скрипта sh в Linux
Вся сила Linux в использовании терминала. Это такая командная оболочка, где вы можете выполнять различные команды, которые будут быстро и эффективно выполнять различные действия. Ну впрочем, вы наверное это уже знаете. Для Linux было создано множество скриптов, которые выполняются в различных командных оболочках. Это очень удобно, вы просто объединяете несколько команд, которые выполняют определенное действие, а затем выполняете их одной командой или даже с помощью ярлыка.
Как работают скрипты
В Linux почти не используется расширение файла для опережения его типа на системном уровне. Это могут делать файловые менеджеры и то не всегда. Вместо этого, используются сигнатуры начала файла и специальные флаги. Система считает исполняемыми только те файлы, которым присвоен атрибут исполняемости.
Запуск скрипта sh в Linux
Сначала рассмотрим пример небольшого sh скрипта:
#!/bin/bash
echo «Hello world»
chmod ugo+x script.sh
Или полный путь от корня:
cp script.sh /usr/local/bin/script.sh
Теперь вы можете выполнить:
А если нам нужно запустить скрипт на php, то выполните:
Вот так все просто здесь работает. Так можно запустить скрипт как фоновый процесс, используйте символ &:
Даже запустить процесс linux не так сложно.
Выводы
Не запускаются скрипты: chmod +x не помогает, ^M нет, noexec не стоит
На CentOS 8 (жаль нет возможности заменить на нормальный дистр) не запускаются никакие скрипты обычным способом.
Все разрешения стоят правильно, виндовых переводов строк в скрипте нет, раздел примаунчен без noexec. Что ещё может быть не так?
Ну как бы ты сам сказал про SELinux. Проверь его журнал на наличие запретов запуска.
Амуде не поддерживает запуск скриптов.
Пусть xxd src.sh даст. У ТС и не такие чудеса бывали.
А /bin/sh то в порядке?
Сноси систему. Доигрался. Чинить дороже, чем поставить заново.
Запускается на вашем интеле чудесном, на том где ещё припой не зажали 😉
Система практически свежая: кроме установки кучи всевозможных пакетов из офиц. репозитория, конфиги особо не правились.
Ну как бы ты сам сказал про SELinux. Проверь его журнал на наличие запретов запуска.
А как это сделать? В премудростях красношапки я мало соображаю, а панель SELinux Troubleshooting почему-то сегфолтится даже после переустановки.
Ты уже настолько запарафинился об амуде, что у тебя уже нигде не запускается.
Не запускается скрипт sh linux
Новые пользователи Linux часто задают вопросы: Как запустить исполняемый файл в Linux? Как выполнить файл. sh в Linux?
Bash — это оболочка, или интерпретатор командного языка, для операционной системы Linux. Это название является аббревиатурой от Bourne-Again SHell.
Как же запустить shell скрипт в Linux?
Откроем терминал. Обычно он вызывается комбинацией клавиш Ctrl+Shift+T. Используйте консольный текстовый редактор вроде vi/vim или nano чтобы создать shell скрипт в линукс:
Сделайте скрипт исполняемым
$ chmod +x myscript.sh
Запустите shell скрипт, написал в терминале:
Теперь давайте рассмотрим другой пример создания sh скрипта в Linux.
Создадим новый файл скрипта test.sh:
Нажмем i или Insert на клавиатуре, чтобы перейти в режим вставки текста. Скопируем туда или напишем следующее:
Чтобы сохранить файл, нажмем ESC, затем напишем 😡 и нажмем ENTER.
Попробуем запустить скрипт:
Ошибка появилась потому что мы не сделали файл исполняемым. Сделаем это. Как и выше, чтобы сделать файл sh в линукс исполняемым, выполним команду:
Запустим его снова:
Мы пишем ./ потому что находимся в той же директории, где и расположен скрипт. Так же мы можем использовать полный путь для запуска из другого места. Например, если скрипт находится в директории /home/user/ то можно запустить так из любого места:
Что у нас есть в скрипте test.sh?
Первая строка #!/bin/bash указывает на интерпретатор, спомощью которого будет исполняться скрипт. В нашем случае это Bash.
Вторая строка использует глобальную переменную $USER, которая содержит имя текущего пользователя, от которого исполняется скрипт. Мы получим «Hello, user», если нашего пользователя зовут user.
В третьей строке мы используем переменную, содержащую текущую дату и время — $(date).