2012-02-15 18 views
6

¿Por qué no funciona lo siguiente?Usando alias con nohup

$ alias sayHello='/bin/echo "Hello world!"' 
$ sayHello 
    Hello world! 
$ nohup sayHello 
    nohup: appending output to `nohup.out' 
    nohup: cannot run command `sayHello': No such file or directory 

(la razón por la que hago esta pregunta es porque he alias mi perl y python a diferentes binarios Perl/Python que fueron optimizados para mis propios fines, sin embargo, nohup me da problemas si no proveo ruta completa a mis binarios de perl/python)

+0

tratar 'eval nohup sayHello' (Me sorprendería si funciona sin embargo). Buena suerte. – shellter

+1

¿Qué le parece poner el comando nohup en el alias: 'alias sayHello = 'nohup/bin/echo" Hola mundo "' ' – orb

Respuesta

7

Porque el shell no pasa los alias a procesos secundarios (excepto cuando usa $() o ``).

$ alias sayHello = '/ bin/echo 'Hola mundo!''

Ahora un alias es conocido en este proceso cáscara, que está bien, pero sólo funciona en este procedimiento en una concha.

$ sayHello 

Hello world! 

Como dijo "sayHello" en el mismo shell funcionó.

$ nohup sayHello 

Aquí, un programa "nohup" se inicia como un proceso secundario. Por lo tanto, no recibirá los alias. Luego inicia el proceso secundario "sayHello" - que no se encuentra.

Para su problema específico, es mejor hacer que los nuevos "perl" y "pitón" se vean como los normales tanto como sea posible. Sugeriría establecer la ruta de búsqueda.

En su ~/.bash_profile añadir: export PATH = "/ mi/brillante/intérpretes/bin: $ {PATH}"

Entonces relogin.

Dado que se trata de una variable de entorno, se se pasará a todos los procesos hijo, sean conchas o no, ahora debería funcionar con mucha frecuencia.

+0

gracias! Lo aprecio – asf107

+0

"Por lo tanto, no recibirá los alias". Estaba pensando, el proceso secundario, como '(echo" TheAlias ​​= $ (alias sayHello; sayHello) ") & wait' falla, parece que el alias no se aplica pero está presente; Me pregunto si podría haber alguna forma de aplicar el alias que sí existe. –

0

Si nos fijamos en la sección Aliases del manual de Bash, se dice

La primera palabra de cada comando simple, si no indicada, se comprueba para ver si tiene un alias.

Por desgracia, no parece que tenga nada bash como zsh 's global aliases, que se expanden en cualquier posición.

2

Para bash: Intente hacer nohup 'your_alias'. Esto funciona para mi. No sé por qué no se muestra la cita posterior. Pon tu alias entre comillas.

1

Con bash, puede invocar una subcadena de forma interactiva utilizando la opción -i. Esto fuente su .bashrc, así como habilitar la opción de shell expand_aliases. Por supuesto, esto solo funcionará si su alias está definido en su .bashrc, que es la convención.

Bash página de manual:

Si la opción -i está presente, el shell es interactivo .

expand_aliases: Si se establece, los alias se expanden como se describe arriba en ALIAS. Esta opción es habilitada por defecto para shells interactivos.

Cuando se inicia un shell interactivo que no es un shell de inicio de sesión, bash lee y ejecuta comandos desde /etc/bash.bashrc y ~/.bashrc, si estos archivos existen.


$ nohup bash -ci 'sayHello'