Question

Pourquoi ne pas les travaux suivants?

$ 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 raison pour laquelle je pose cette question parce que je suis mon Aliased perl et python à différents binaires perl / python qui ont été optimisés pour mes propres fins, mais nohup me donne si je n'inquiète, ce ne fournir le chemin complet à mon perl / binaires python)

Était-ce utile?

La solution

Parce que le shell ne passe pas des alias sur les processus enfants (sauf si vous utilisez $ () ou ``).

$ alias sayHello = '/ bin / echo "Bonjour tout le monde!"

un alias est connu dans ce processus shell, ce qui est bien, mais ne fonctionne que dans celui processus shell.

$ sayHello 

Hello world!

Puisque vous avez dit « sayHello » dans la même coquille, il a travaillé.

$ nohup sayHello

Ici, un programme « nohup » est en cours de démarrage comme un processus enfant. Par conséquent, il ne recevra pas les alias. Ensuite, il démarre le processus de l'enfant « sayHello » -. Qui ne se trouve pas

Pour votre problème spécifique, il est préférable de faire le nouveau « perl » et l'aspect « python » comme les normales autant que possible. Je vous suggère de définir le chemin de recherche.

Dans votre ~ / .bash_profile ajouter: export PATH = "/ mon / brillant / interprètes / bin: $ {PATH}"

Alors relogin.

Comme il est une variable d'environnement, il être transmis à tous les processus enfants, qu'ils soient des coquilles ou non -. Il devrait maintenant travailler très souvent

Autres conseils

Pour bash: Essayez de faire nohup 'your_alias'. Ça marche pour moi. Je ne sais pas pourquoi citation de retour n'apparaît pas. Mettez votre alias entre guillemets arrière.

Avec bash, vous pouvez invoquer un sous-shell interactive en utilisant l'option -i. Cela source de votre .bashrc ainsi que d'activer l'option shell expand_aliases. Certes, cela ne fonctionnera que si votre alias est défini dans votre .bashrc qui est la convention.

Bash manpage:

Si l'option -i est présent, la coquille est interactive .

expand_aliases : Si ensemble, alias sont tels que décrits ci-dessus sous ALIAS. Cette option est activée par défaut pour les shells interactifs.

Quand un shell interactif qui n'est pas un shell de connexion est démarré, bash lit et exécute les commandes de /etc/bash.bashrc et ~/.bashrc, si ces fichiers existent.


$ nohup bash -ci 'sayHello'

Si vous regardez la section Alias ?? du Bash manuel, il est dit

Le premier mot de chaque commande simple, si unquoted, est vérifié pour voir si elle a un alias.

Malheureusement, il ne semble pas comme bash a quelque chose comme de zsh alias globaux , qui sont développées dans toutes les positions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top