Часть сценария оболочки не выполняется

Я только начал делать шаги для сценариев оболочки. Мой сценарий выглядит примерно так:

firefox -new-tab -url google.com -new-tab -url yahoo.com
clear
cd /opt/lampp
sudo ./lampp start
cat somefile

Обе новые вкладки открываются в Firefox, а затем терминал останавливает дальнейшее выполнение (оболочка не возвращается к отображению приглашения, хотя она по-прежнему работает с Firefox). Если я нажимаю Ctrl + C , то это закрывает окно Firefox, и терминал возвращается в исходное состояние терминала.

Как я могу переписать код, чтобы все строки кода работали правильно (я хочу, чтобы Firefox сначала открывался предпочтительно)? Что я делаю не так?

3
задан 9 June 2015 в 11:16

1 ответ

Необходимо добавить амперсанд (&) до конца первой строки в Вашем сценарии или использования nohup.

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

nohup выгоды сигнал зависания, в то время как амперсанд не делает, это означает при выполнении команды с помощью & и выходя из оболочки впоследствии, оболочка завершит подкоманду с сигналом kill -SIGHUP PID зависания, в то время как nohup выгоды сигнал и игнорирует его.

Поэтому теперь Ваш сценарий был бы похож:

firefox -new-tab -url google.com -new-tab -url yahoo.com & 
clear
cd /opt/lampp
sudo ./lampp start
cat somefile

, Поскольку OP сказал, последняя версия (использовал nohup):

nohup firefox -new-tab -url google.com -new-tab -url yahoo.com  & 2>/dev/null
clear
cd /opt/lampp
sudo ./lampp start
cat somefile
0
ответ дан 9 June 2015 в 11:16

Другие вопросы по тегам:

Похожие вопросы: