2013-08-23 13 views
22

Ich benutze frisch installiertes Arch Linux. Wenn ich mich bei einem Benutzer anmelde (running bash) und versuche, einen Alias ​​von .bashrc zu verwenden, bekomme ich den Fehler 'Befehl nicht gefunden'. Aber wenn ich bash mit dem Befehl 'bash' erneut eingabe, funktioniert der Befehl einwandfrei.bashrc wird nicht geladen bis run bash befehl

Ja, ich bin schon in bash.

env zunächst:

SHELL=/usr/bin/bash 

env nach bash läuft, bleibt es:

SHELL=/usr/bin/bash 

Also ich bin nicht ganz sicher, wo das Problem ist.

+0

Welchen Alias ​​verwenden Sie? – lulyon

+0

Nun, es ist eigentlich eine Funktion: Funktion cl() {cd $ @; ls} –

+0

Mögliche Duplikate: http://StackOverflow.com/a/415444/208997 – Simon

Antwort

41

Lesen Sie den Abschnitt INVOCATION aus "Bash (1)" für die vollständigen Details (das ist die man-Seite für bash; verwenden Sie man bash). Ihre erste Shell beim Einloggen ist eine "Login-Shell", was bedeutet, dass die .bashrc Datei nicht bezogen ist. Ihr zweiter Aufruf erstellt eine interaktive Shell, in der .bashrc stammt.

Wenn Sie immer den Inhalt Ihrer .bashrc Datei verarbeitet möchten, können Sie die folgenden Zeilen zu Ihrer .bash_profile Datei hinzufügen, dass die Datei zu erstellen, wenn es nicht bereits vorhanden ist:

if [ -f ~/.bashrc ]; then 
    . ~/.bashrc 
fi 

Per seiner Manpage, bash "[...] sucht in dieser Reihenfolge nach ~/.bash_profile, ~/.bash_login und ~/.profile und liest und führt Befehle aus der ersten aus, die vorhanden und lesbar ist." Konventionen und Richtlinien Ihres lokalen Systems bestimmen, welche dieser Dateien bereits existieren.

Ein Wort der Vorsicht: bewusst sein, dass ein neues .bash_profile in Ihrem Home-Verzeichnis erstellen die unbeabsichtigte Nebenwirkung der Verhinderung die Lesung haben könnte und bereits in einer .bash_login oder .profile Datei von Befehlen ausgeführt wird, weiter das Verhalten der anschließenden Wechsel Logins.

+4

Und erstellen '~/.bash_login' Datei, wenn noch nicht hier –

+2

oder verwenden Sie '~ /. Profile' für alle Bourne-kompatiblen Login-Shells. (bash) – Qwerty

+1

@Qwerty: Wenn Sie Ihre Umgebung so pflegen, dass ~/.bash_profile und ~/.bash_login nicht existieren, funktioniert ~/.profile. Von einer Bash-Manpage der Version 4.2: "Wenn bash als interaktive Login-Shell oder als nicht interaktive Shell mit der Option --login aufgerufen wird, liest und führt sie zuerst Befehle aus der Datei/etc/profile aus, falls diese Datei vorhanden ist Nach dem Lesen dieser Datei sucht sie nach ~/.bash_profile, ~/.bash_login und ~/.profile in dieser Reihenfolge und liest und führt Befehle aus der ersten aus, die existiert und lesbar ist. " – sjnarv

5

Haben Sie Ihre , ~/.bash_login und ~/.bash_profile Dateien angesehen?

+2

Sie sind zu diesem Zeitpunkt nicht vorhanden –

+2

Danke, total vergessen. Nicht daran gewöhnt, Dinge dank Ubuntu einrichten zu müssen. –