Я только начал делать шаги для сценариев оболочки. Мой сценарий выглядит примерно так:
firefox -new-tab -url google.com -new-tab -url yahoo.com
clear
cd /opt/lampp
sudo ./lampp start
cat somefile
Обе новые вкладки открываются в Firefox, а затем терминал останавливает дальнейшее выполнение (оболочка не возвращается к отображению приглашения, хотя она по-прежнему работает с Firefox). Если я нажимаю Ctrl kbd> + C kbd>, то это закрывает окно Firefox, и терминал возвращается в исходное состояние терминала.
Как я могу переписать код, чтобы все строки кода работали правильно (я хочу, чтобы Firefox сначала открывался предпочтительно)? Что я делаю не так?
Необходимо добавить амперсанд (&) до конца первой строки в Вашем сценарии или использования 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