Warum funktioniert das Festlegen des Alias ​​in .profile nicht?

11

Ich habe dies als letzte Zeile in meinem .profile:

alias gl="cd /home/jrenner/glances/glances"

Doch auch nach dem Neustart wird der Befehl bei der Eingabe von gl nicht gefunden. Was ist los? Ich bin als der richtige Benutzer angemeldet.

Talloaktrees
quelle
Wo tippst du gl? Das Terminal? Die GUI?
Thomas Ward
1
Niemand hat jemals das Original angesprochen, warum? Frage. Ich kann bestätigen, dass in definierte Aliase .profilein keinem von mir versuchten Kontext funktionieren: Textkonsolenanmeldungen, grafische Terminals oder irgendetwas anderes, obwohl Umgebungsvariablen aus derselben Datei funktionieren.
Daniel Mahler
@ DanielMahler, hast du einen Grund warum?
Maged Saeed

Antworten:

4

Ich bin mir ziemlich sicher, dass die Idee von lpanebr funktionieren wird, aber hier ist eine elegantere Lösung. Führen Sie diesen Alias-Befehl in .bashrc aus. So mache ich das, oder einige Leute ziehen es vor, eine Alias-Datei hinzuzufügen. Nennen Sie es .aliasoder was auch immer und fügen .aliasSie es hinzu.bashrc

Ich wünschte, ich könnte wie @lpanelbr formatieren. Ich frage mich, ob es ein Wiki gibt.

Jason
quelle
1
Für die Formatierung verwendet askubuntu Markdown. Weitere Informationen finden Sie unter askubuntu.com/editing-help .
saji89
1
Warum arbeitet .bashrc, während .profilenicht? Gibt es auch einen Grund, warum Sie die Alias-Datei .alliasnicht benannt haben .alias?
Tom
# 1 Soweit ich weiß, ist .bashrc spezifisch für Bash und .profile spezifisch für Nicht-Bash-Befehlszeilen. # 2 Ich weiß nicht was du meinst. Ich kann doch buchstabieren. (bearbeitet)
Jason
6

Es gibt zwei verwandte Gründe, warum Aliase nicht immer funktionieren, wenn sie in die .profileDatei eingefügt werden. Das erste ist, dass die .profile(oder .bash_profile) Datei nur für eine Anmeldeshell ausgeführt wird. Wenn Sie bash in einem Terminalfenster unter X starten, führt Ihr Terminalemulator (z. B. gnome-termanl) bash wahrscheinlich nicht als Login-Shell aus. [Die meisten haben die Möglichkeit, dies zu ändern, wenn Sie möchten, aber die Standardeinstellung (für gnome-termal sowieso) besteht darin, es nicht als Login-Shell auszuführen.]
Die Shell ist eine interaktive Shell und .bashrcwird daher ausgeführt.

Normalerweise wurde Bash jedoch als Anmeldeshell ausgeführt, als die X-Sitzung gestartet wurde. Wenn also Alias-Befehle enthalten .profilesind, wurden diese zusammen mit dem Festlegen von Umgebungsvariablen wie PATH usw. ausgeführt. Wenn ein Terminalfenster geöffnet wird, wird eine neue Instanz von bash ausgeführt, um zur Eingabe aufzufordern und Befehle in diesem Terminalfenster auszuführen. Im Gegensatz zu Umgebungsvariablen können Aliase nicht von einer Bash-Instanz in eine neue exportiert werden, die von ihr gestartet wurde. Die Aliase werden also nicht an die neue Shell weitergegeben.

Versuchen Sie dieses Experiment, um dies zu sehen:

export ROBERT=bob
alias james=jimmy
echo $ROBERT
alias james
bash               #start a new bash instance
echo $ROBERT
alias james
exit               #end the new bash instance and revert to the original one
echo $ROBERT
alias james

Beachten Sie, dass .bashrcbash nicht ausgeführt wird, wenn es als Anmeldeshell gestartet wird. Das Platzieren Ihrer Aliase dort funktioniert also nicht immer, es sei denn, Ihre .bashrcstammen von Ihnen .profile, was eine sehr verbreitete Praxis ist.

Tony McGregor
quelle
Verifiziert: Durch Hinzufügen source .bashrcwurde .bash_profileder in .bashrc festgelegte Alias ​​aktiviert.
Treefish Zhang
0

Wenn Sie bash ( echo $SHELL) als Shell-Interpreter verwenden, ist es meiner Meinung nach am besten (oder vielleicht der einzige Weg), wenn Sie Ihre eigene CD-Funktion definieren.

Bearbeiten Sie Ihre .bashrcDatei und fügen Sie am Ende Folgendes hinzu:

# my custom functions:
function gl () {
   cd /home/jrenner/glances/glances/
}

Sie können es auch so erweitern:

# my custom functions:
function cdw () {
   cd /home/jrenner/glances/glances/$1
   ls
}

und wechseln Sie direkt in ein Unterverzeichnis und listen Sie dessen Inhalt auf.

lpanebr
quelle
1
Das mag ein guter Vorschlag sein, ist aber keine Antwort, da es nicht erklärt, warum die aliasin die .profileDatei eingefügte Direktive fehlschlägt.
Tom
0
$ bash #start a new bash instance

Dies war ein Problem mit meinem Server. Simple source .profilehat aus irgendeinem Grund nicht funktioniert

Mladen Janjetovic
quelle