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)

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top