Pregunta

¿Por qué no funciona los siguientes?

$ 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 de Perl/Python que estaban optimizados para mis propios fines; Sin embargo, Nohup me da problemas si no suministro un camino completo a mis binarios de Perl/Python)

¿Fue útil?

Solución

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

$ alias sayhello = '/bin/echo "¡Hola mundo!"

Ahora se conoce un alias en este proceso de shell, que está bien, pero solo funciona en este proceso de shell.

$ sayHello 

Hello world!

Desde que dijiste "Sayhello" en el mismo caparazón, funcionó.

$ nohup sayHello

Aquí, un programa "Nohup" se está iniciando como un proceso infantil. Por lo tanto, no recibirá los alias. Luego comienza el proceso infantil "Sayhello", que no se encuentra.

Para su problema específico, es mejor hacer que el nuevo "Perl" y "Python" parezcan los normales tanto como sea posible. Sugeriría establecer la ruta de búsqueda.

En su ~/.bash_profile add: export path = "/my/shiny/intérpretes/bin: $ {ruta}"

Luego relajar.

Dado que esta es una variable de entorno, voluntad pasar a todos los procesos infantiles, ya sean conchas o no, ahora debería funcionar muy a menudo.

Otros consejos

Para Bash: intenta hacer nohup 'your_alias'. Esto funciona para mi. No sé por qué no se muestra la cita posterior. Ponga su alias dentro de las citas.

Con Bash, puede invocar una subshell interactivamente utilizando el -i opción. Esto obtendrá tu .bashrc así como habilitar el expand_aliases opción de shell. De acuerdo, esto solo funcionará si su alias se define en tu .bashrc cual es la convención.

Bash Manpage:

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

expandir_aliases: Si se establece, los alias se expanden como se describe anteriormente en alias. Esta opción es habilitado por defecto para conchas interactivas.

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


$ nohup bash -ci 'sayHello'

Si miras el Alias sección del manual de bash, dice

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

Desafortunadamente, no parece ser bash tiene algo como zsh's alias globales, que se expanden en cualquier posición.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top