Я пытаюсь написать простой скрипт для отправки, включающий мой контроллер скачка движения. Включение устройства включает в себя включение службы и запуск панели управления. Проблема, с которой я столкнулся, заключается в том, что сервис не уходит в фоновый режим и не освобождает мой терминал.
Сценарий довольно прост и находится в моей корзине $ USER.
#!/bin/bash
LeapControlPanel &
sudo leapd &
Игнорировать критические вещи из веб-сокетов, уверяю вас, контроллер работает, единственная проблема, я хочу, чтобы служба вернула мой незамедлительный.
Это сделало возврат Вы к подсказке - это находится на второй строке Вашего снимка экрана. Сообщения об ошибках просто испортили дисплей. Попытайтесь ввести команду, Вы будете видеть, что она работает. Или тип Входит для получения новой подсказки.
Сценарий перешел к фону и возвратил Вашу подсказку. Проблема состоит в том, что Вы не перенаправляете ее вывод нигде, так, чтобы все еще появился в Вашем терминале. Отправка команды к фону просто означает, что это продолжит работать, и можно сделать другие вещи в родительской оболочке. Однако, так как команда работает, ее вывод (и stdout и stderr) все еще подключены к Вашему текущему терминалу, и вот почему Вы все еще видите их.
Так, для отправки команды в фон и скрывают его вывод, Вам нужно:
Перенаправление stdout только так, чтобы любые сообщения об ошибках были все еще распечатаны к терминалу:
./leap > leap.log &
Перенаправление stderr только так, чтобы произведенный, но не ошибки все еще появился на терминале:
./leap 2> leap.log &
Перенаправление оба так, чтобы ничто не было распечатано к терминалу:
./leap > leap.log 2>&1 &
Или (если Ваша оболочка поддержки это)
./leap &> leap.log &
Во всех примерах, для отбрасывания вывода вместо того, чтобы сохранить в файл, использование /dev/null
вместо leap.log
.