Простое форматирование и перенаправление вывода команды на/dev/null

Я часто выполняю из команд оболочки (в моем случае Bash), которые я хочу разблокировать, и чей вывод я хочу игнорировать. Так часто на самом деле я создал script (silent):

#!/bin/bash
[email protected] &> /dev/null &

Затем я могу запустить, например.

silent inkscape myfile.svg

и мой терминал не будет загрязнен отладочным результатом процесса, который я только раздвоил.

У меня есть два вопроса:

  • Есть ли "официальный" способ сделать это?, то есть что-то более короткое, но эквивалентное &> /dev/null &?

  • Если нет, есть ли способ сделать работу по завершению работы после моей команды silent, как если бы ее не было? Чтобы привести пример, после того, как я набрал silent inksc, я хотел бы, чтобы bash автоматически завершил мою команду до silent inkscape, когда я нажимаю [tab].

Ответ 1

в стороне: возможно, нужно exec "[email protected]" &> /dev/null & в silent script, чтобы заставить его отказаться от суб-оболочки, а кавычки вокруг "[email protected]" будут мешать пробелам.

Что касается №2: complete -F _command silent должен делать что-то вроде того, что вы хотите. (Я называю свою версию этого script launch и имеет complete -F launch в моем .bash_profile)

Ответ 2

Похоже, nohup делает больше или меньше того, что вы хотите. Проблема с завершением табуляции состоит в том, что bash считает, что вы пытаетесь завершить имя файла как аргумент script, тогда как его правила завершения знают, что nohup принимает команду в качестве своего первого аргумента.

Nohup перенаправляет stout и stderr на nohup.out и также оставит команду запущенной, если ваша оболочка завершена.

Ответ 3

Здесь немного script, которое я использую для запуска интерактивных (и chatty) X-приложений, например. xterm

#!/bin/bash
exe="$1"
shift
"$exe" "[email protected]" 2>/tmp/$$."$exe".err 1>&2 & disown $!

Нет вывода, не будет умирать, если терминал выйдет, но в случае, если что-то пойдет не так, журнал всех выходных данных в /tmp

Если вы не хотите, чтобы журнал просто использовал /dev/null вместо этого.

Также будет работать от функции, если вы script -алергический.

Ответ 4

Возможно, если бы вы могли "переподтвердить" ключ табуляции? Пример для суперпользователя Stackoverflow с ключом ввода. Это правильная идея?