%20%D0%B2%20%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%BA%D0%B5%20Windows.png)
Я хотел бы запустить определенное приложение (назовем его foo
) из командной строки, но я не хочу, чтобы оно задерживало терминал, помещая в него всякий мусор из своего вывода или потоков ошибок, и также хочу, чтобы оно продолжало работать, даже если я закрою этот терминал. В Bash я могу сделать это с помощью (foo &>/dev/null &)
, но я не знаю, как это сделать в оболочке Windows. Может ли кто-нибудь мне помочь?
решение1
В Windows это можно сделать следующим образом:
start /B foo > NUL 2>&1
Команда start
запустит отсоединенный процесс, эффект аналогичен &
. /B
Параметр предотвращает start
открытие нового окна терминала, если запущенная вами программа является консольным приложением (для приложений с графическим интерфейсом это необязательно). Имеет >
то же значение, что и в Linux, и NUL
является эквивалентом в Windows /dev/null
. 2>&1
Вконецперенаправит stderr в stdout, который будет отправлен в NUL
.
решение2
Прямого эквивалента не существует.
Как описаноздесь, вызов программы таким образом, чтобы не блокировать вызывающую программу, можно сделать с помощью start
команды, используя /b
опцию. Не знаю насчет перенаправления вывода в этом случае. Возможно, вам придется обернуть это в пакетный файл.
Что касается > /dev/null
, то тут все просто: >NUL
. NUL
— это имя устройства DOS. Однако оператор сокращения недоступен. Вам придется действовать вручную с помощью 2>&1
.ЗдесьВот еще информация по этому поводу.