Запустите скрипт bash в другом процессе - PullRequest
0 голосов
/ 06 января 2019

ТАК Я делаю простой сценарий, который загружает два сценария и команду, но ради аргумента, давайте останемся простыми, не учитывая специфику многих проектов.

Просто, чтобы вы знали, я работаю в среде Распбиана. Это самый последний выпуск. Я на Raspberry Pi 3B +, если это имеет значение. Мой pi настроен на запуск в консоли, поэтому я могу сразу запустить этот скрипт (через псевдоним).

Продолжаем, у нас есть три сценария внутри, скажем, originalScript.sh:

~loop.sh

~processStart.sh

~startx (this is specific, but in case you don't know, this is the command used in raspberry pi terminal ((and probably any Linux GUI system)) that initiates the OS's GUI)

Проблема. Эта команда должна заканчиваться последней командой startx, чтобы графический интерфейс загрузился для запуска processStart.sh. Проблема в том, что loop.sh также должен запускаться, но когда это первая или вторая команда, следующие команды никогда не достигаются. Я хотел бы сделать это последним, но когда я запускаю startx, сценарий отключается при загрузке графического интерфейса пользователя (таким образом, требуется открыть новый терминал и повторно запустить исходный сценарий с ошибками ((поскольку графический интерфейс уже загружен.)))

Есть ли способ заставить loop.sh запускаться как процесс или открываться в другом сеансе, пока startx делает это? Я пытался

`source ~/loop.sh`

`bash ./loop.sh`

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

Если я не могу запустить этот скрипт таким образом, по логике будет другой способ запустить его одновременно через один скрипт?

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 06 января 2019

В bash loop.sh можно запустить как фоновый процесс, добавив в команду амперсанд. (т. е. loop.sh &) Команда будет выполняться в фоновом режиме, а остальная часть сценария продолжит выполняться.

Обратите внимание, что если loop.sh делает что-то, что нужно сделать до startx, вам нужно добавить дополнительную логику в скрипт, чтобы убедиться, что startx готов к запуску.

source loop.sh вызовет запуск loop.sh в текущей оболочке и не вернется, пока loop.sh не выйдет.

bash loop.sh запустит новый bash процесс и запустит loop.sh. Сценарий не будет продолжаться до тех пор, пока не завершится процесс bash.

...