Вся сила Linux в использовании терминала. Это такая командная оболочка, где вы можете выполнять различные команды, которые будут быстро и эффективно выполнять различные действия. Ну впрочем, вы наверное это уже знаете. Для Linux было создано множество скриптов, которые выполняются в различных командных оболочках. Это очень удобно, вы просто объединяете несколько команд, которые выполняют определенное действие, а затем выполняете их одной командой или даже с помощью ярлыка.
Но у новичков может возникнуть вопрос — как запустить скрипт в Linux, что для этого нужно сделать, что будет происходить и какие команды нужно выполнить. Но сначала нужно рассмотреть как работают скрипты и что такое исполняемость.
Как работают скрипты
В Linux почти не используется расширение файла для опережения его типа на системном уровне. Это могут делать файловые менеджеры и то не всегда. Вместо этого, используются сигнатуры начала файла и специальные флаги. Система считает исполняемыми только те файлы, которым присвоен атрибут исполняемости.
Автоматический запуск программ и скриптов при помощи скрипта rc.local после включении Raspberry Pi
Теперь о том, как работают скрипты. Это обычные файлы, которые содержат текст. Но если для них установлен атрибут исполняемости, то для их открытия используется специальная программа — интерпретатор, например, оболочка bash. А уже интерпретатор читает последовательно строку за строкой и выполняет все команды, которые содержатся в файле.
У нас есть несколько способов выполнить запуск скрипта linux. Мы можем запустить его как любую другую программу через терминал или же запустить оболочку и сообщить ей какой файл нужно выполнять. В этом случае не нужно даже флага исполняемости.
Запуск скрипта sh в Linux
Сначала рассмотрим пример небольшого sh скрипта:
#!/bin/bash
echo «Hello world»
10 комментариев к записи “ Bash script — проверка программы на запущенность и ее запуск ”
if [ «$ret» -eq 1 ] вот так работает с нулем всегда считает запущенным так как сама команда греп создает процесс и таким именем
В пояснении к скрипту написано, как исключается из списка процессов сам grep.
Не спорю возможно но моя убунта 14.04 упорно считала сама себя
Что у Вас выводит эта команда?
Походу ничего не выводит, скобки не воспринимает. Это урезанная pxe сборка для загрузки по nfs. А вот на основном серве с полноценной инсталяшкой все работает для интересу проверил.
Если htop не запущен, команда и не должна ничего выводить. Скобки служат для исключения grep из вывода.
Скорее всего, grep у Вас работает как раз верно, не смотря на сборку.
Чё-то как-то сложновато у вас всё. Вот как я сделал бы:
if [ -z «$(ps -C top —no-headers)» ] ; then top; fi
Проверено на труъ убунте в bash и sh.
А «ps aux | grep [t]op» выдаёт лично у меня нечто со словами org.freedesktop.
Это, конечно, top, а не htop… Но зачем такое писать? Какие-то квадратные скобки… То ли выпендрёж, то ли костыли… Тем более с aux зачем-то… Зачем? Почему не -a, не -d, а именно aux? Не понимаю…
Научись Linux: запуск собственных скриптов (эпизод 12)
Мало ли что там у человека запущено с таким сочетанием букв в путях, именах или параметрах… Вы бы ещё «e» в опции добавили для пущего веселья.
Спасибо за полезный комментарий!
Однако, справедливости ради замечу, что когда ты админишь сервера, то посмотреть вывод ps намного проще и быстрее, чем городить конструкции из if-условий В скрипте, согласен, так выглядит элегантнее.
Источник: auto-technologies.ru
Использование команды Exec в сценарии Bash
При создании сценариев Bash мы можем захотеть перенаправить вывод всех операторов echo в файл журнала без явного указания оператора перенаправления и имени файла журнала после каждого оператора echo. Команда Bash exec — это мощная встроенная утилита, которую можно использовать для этой цели. В этом руководстве мы рассмотрим, как можно использовать команду exec для добавления протоколирования ошибок и вывода в сценарии оболочки. Мы также рассмотрим другие способы использования этой команды в сценариях командного интерпретатора.
Основы
При выполнении любой команды в оболочке Bash по умолчанию создается подоболочка, и порождается новый дочерний процесс (forked) для выполнения команды. Однако при использовании команды exec команда, следующая за exec, заменяет текущую оболочку. Это означает, что под-оболочка не создается, а текущий процесс заменяется этой новой командой.
Давайте проведем эксперимент, чтобы лучше понять это:
pstree -p init(1)─┬─init(52)───bash(53) ├─init(78)───bash(79)───pstree(108) └─(7) echo $$ 79 exec sleep 300
linux bash запуск программ
Как системный администратор, вполне вероятно, что вы написали несколько сценариев Bash для автоматизации вашей работы. Например, вы можете запускать сценарии Bash для резервного копирования вашей работы или для регистрации некоторых событий, происходящих на вашем сервере.
Онлайн курс по Linux