Durch Verwendung von Aliase mit nohup
Frage
Warum nicht die folgenden arbeiten?
$ 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
(der Grund, warum ich Frage, ist, weil ich habe alias-meine perl
und python
an verschiedenen perl/python-Binärdateien wurden optimiert für meine eigenen Zwecke;jedoch, nohup gibt mir Probleme, wenn ich nicht liefern vollständige Pfad zu meiner perl/python-Binärdateien)
Lösung
Da die shell nicht passieren Aliase auf, um die untergeordneten Prozesse (außer, wenn Sie verwenden $ () - oder `).
$ alias sayHello='/bin/echo "Hallo Welt!"'
Jetzt ein alias ist bekannt in diesem shell-Prozess, die ist in Ordnung, funktioniert aber nur in dieser einen shell-Prozess.
$ sayHello
Hello world!
Da Sie sagte "sayHello" in der gleichen shell aus, es funktionierte.
$ nohup sayHello
Hier ein Programm "nohup" gestartet wird, wie ein Kind-Prozess.Daher, es erhalten nicht die Aliasnamen.Dann beginnt es von der Kind-Prozess "sayHello" - das ist nicht gefunden.
Für dein spezifisches problem, es ist beste zu machen die neue "perl" und "python" sehen aus wie die normalen, so viel wie möglich.Ich würde vorschlagen, auf der Suche Weg.
In Ihrem ~/.bash_profile hinzufügen:export PATH="/my/glänzend/Dolmetscher/bin:${PATH}"
Dann relogin.
Denn dies ist eine Umgebungsvariable, es wird an alle die Kind-Prozesse, seien es Muscheln oder nicht - es sollte jetzt funktionieren sehr oft.
Andere Tipps
Für bash:Versuchen Sie nohup 'your_alias
'.Es funktioniert für mich.Ich weiß nicht, warum wieder zitieren, ist nicht gezeigt.Setzen Sie Ihren alias in back quotes.
Mit Bash können Sie eine Subschale interaktiv mit dem aufrufen -i
Möglichkeit. Dadurch wird Ihre beschaffen .bashrc
sowie aktivieren die expand_aliases
Shelloption. Zugegeben, dies wird nur dann funktionieren, wenn Ihre alias ist in Ihrem definiert .bashrc
Welches ist die Konvention.
Bash -Manpage:
Wenn die
-i
Option ist vorhanden, die Shell ist interaktiv.expon_aliases: Wenn festgelegt, werden Aliase wie oben beschrieben unter Aliase erweitert. Diese Option ist standardmäßig aktiviert für interaktive Muscheln.
Wenn eine interaktiv
/etc/bash.bashrc
und~/.bashrc
, wenn diese Dateien existieren.
$ nohup bash -ci 'sayHello'
Wenn Sie einen Blick auf die Aliases Abschnitt des Bash-Handbuch, heißt es
Das erste Wort jedes einfache Kommando, wenn ohne Anführungszeichen, überprüft, um zu sehen wenn Sie einen alias hat.
Leider, es scheint nicht, wie bash
etwas wie zsh
's Globale Aliase, die erweitert werden, in jeder position.