2011-12-08 5 views
11

Frecuentemente ejecuto desde un shell (en mi caso Bash) comandos que quiero bifurcar inmediatamente y cuya salida quiero ignorar. Con tanta frecuencia, de hecho, que he creado un script (silent) se hace:Simplemente bifurcando y redireccionando la salida de un comando a/dev/null

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

Entonces puede funcionar, por ejemplo,

silent inkscape myfile.svg 

y mi terminal no se verá contaminada por la salida de depuración del proceso que acabo de bifurcar.

Tengo dos preguntas:

  1. hay una manera "oficial" de hacer esto ?, es decir, algo más corto, pero equivalente a &> /dev/null &?

  2. Si no, ¿hay alguna forma de que pueda completar la tabulación después de mi comando silent como si no estuviera allí? Para dar un ejemplo, después de haber tipeado silent inksc, me gustaría bash autocompletar mi comando al silent inkscape cuando presiono [tab].

+0

Escribiste 'como si no estuviera allí'. Lo siento, ¿qué es "eso"? Tal vez puedas editar tu publicación para aclararla. Buena suerte. – shellter

+0

Significa hacer que bash trate los argumentos a 'silent' como un comando normal, con la finalización de pestañas normal disponible para ese comando. Así que 'silent git pus [TAB]' se completaría a 'silent git push'. –

+1

Aclaré la segunda pregunta, gracias por preguntar. El ejemplo de git es tal vez incluso mejor, ya que muestra que me gustaría que bash utilice el perfil de finalización de git en ese caso. – Philippe

Respuesta

4

lado: probablemente quieren exec "[email protected]" &> /dev/null & en el script silent, para hacer que se descarte el sub-shell, y las comillas alrededor de "[email protected]" mantendrá espacios de entrar en el camino.

En cuanto a # 2: complete -F _command silent debe hacer algo como lo que quiere. (Debo llamar a mi versión de ese guión launch y tienen complete -F launch en mi .bash_profile)

0

¿Tal vez si pudiera 'volver a enlazar' la tecla de tabulación? Se muestra un example en Superuser Stackoverflow con la tecla Intro. ¿Es esta la idea correcta?

1

Aquí hay un pequeño script que utilizo para el lanzamiento de aplicaciones interactivas X (y hablador) a partir de, por ejemplo, un xterm

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

No hay salida, no se va a morir si las salidas del terminal, pero en caso de que algo va mal hay un registro de toda la producción en/tmp

Si no desea que el registro sólo tiene que utilizar/dev/null en su lugar.

También funcionará desde una función si es script-alérgic.

2

Parece que nohup hace más o menos lo que quiere. El problema de finalización de pestañas se debe a que bash piensa que está tratando de completar un nombre de archivo como argumento para el script, mientras que sus reglas de finalización saben que nohup toma un comando como su primer argumento.

nohup redirige robusto y stderr a nohup.out y también saldrán del sistema que se ejecuta si sus salidas de concha.

+0

Supongo que 'nohup' es casi lo que quiero; no bifurca automáticamente el proceso, por lo que entiendo su funcionamiento. – Philippe

+0

No, pero puede usar "comando nohup &" si necesita ejecutar el proceso en segundo plano. – nelz

Cuestiones relacionadas