it-swarm.com.de

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

Ich habe dies als letzte Zeile in meinem .profile:

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

doch auch nach dem neustart bekomme ich befehl nicht gefunden beim tippen von gl. Was ist los? Ich bin als der richtige Benutzer angemeldet.

8
talloaktrees

Ich bin mir ziemlich sicher, dass die Idee von lpanebr funktionieren wird, aber hier ist eine elegantere Lösung. Führe diesen Alias-Befehl in .bashrc aus. So mache ich das, oder manche Leute ziehen es vor, eine Datei hinzuzufügen, die dem Alias ​​gewidmet ist. Nenne es .alias oder was auch immer und füge .alias zu deinem .bashrc hinzu

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

4
Jason

Es gibt zwei verwandte Gründe, warum Aliase in der Datei .profile nicht immer funktionieren. Das erste ist, dass die Datei .profile (oder .bash_profile) 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 Anmeldeshell aus. [Die meisten haben die Option, dies zu ändern, wenn Sie möchten, aber die Standardeinstellung (für gnome-termal) ist, dass es nicht als Anmeldeshell ausgeführt wird.]
Die Shell wird eine interaktive Shell sein und so wird .bashrc ausgeführt.

Normalerweise wurde bash jedoch als Anmeldeshell ausgeführt, als die X-Sitzung gestartet wurde. Wenn es also Alias-Befehle in .profile gibt, werden sie zusammen mit 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 Terminal auszuführen Fenster. 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.

Probieren Sie dieses Experiment aus, 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 .bashrc nicht von bash ausgeführt wird, wenn es als Anmeldeshell gestartet wird. Wenn Sie Ihre Aliase dort ablegen, funktioniert dies nicht immer, es sei denn, Ihr .bashrc stammt von Ihrem .profile, was eine weit verbreitete Praxis ist.

5
Tony McGregor

Wenn Sie bash (echo $Shell) als Shell-Interpreter verwenden, ist es meines Erachtens am besten (oder vielleicht auch nur so), wenn Sie Ihre eigene CD-Funktion definieren.

Bearbeiten Sie Ihre .bashrc -Datei und fügen Sie am Ende Folgendes hinzu:

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

Sie könnten 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.

0
lpanebr
$ bash #start a new bash instance

Das war ein Problem mit meinem Server. Simple source .profile hat aus irgendeinem Grund nicht funktioniert

0