Просто разветвление и перенаправление вывода команды в / dev / null - PullRequest
11 голосов
/ 08 декабря 2011

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

#!/bin/bash
$@ &> /dev/null &

Я могу бежать, например,

silent inkscape myfile.svg

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

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

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

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

Ответы [ 4 ]

4 голосов
/ 08 декабря 2011

в стороне: возможно, вы захотите exec "$@" &> /dev/null & в вашем скрипте silent, чтобы заставить его отказаться от вложенной оболочки, а кавычки вокруг "$@" будут препятствовать пробелам мешать.

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

3 голосов
/ 09 декабря 2011

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

2 голосов
/ 08 декабря 2011

Вот небольшой скрипт, который я использую для запуска интерактивных (и болтливых) приложений X, например, Xterm

#!/bin/bash
exe="$1"
shift
"$exe" "$@" 2>/tmp/$$."$exe".err 1>&2 & disown $!

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

будет записан журнал всех выходных данных.

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

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

0 голосов
/ 08 декабря 2011

Возможно, если бы вы могли «перепривязать» клавишу табуляции? пример на суперпользователе Stackoverflow с клавишей ввода.Это правильная идея?

...