• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Anfängerfrage: Gültigkeitsbereich von alias

El

Member
ich habe mir eine einfache Anfänger aufgabe gestellt:
ich möchte anstatt clear cls für das löschen des Bildschirminhaltes nutzten.
also habe ich 'alias cls=clear' in der ~.profile eingetragen. das funktioniert aber nicht. ich hatte das system neu gestartet.
nun meine fragen
1- wie kann ich die Datei mit dem neuen Eintrag aktivieren, ohne das System neu starten zu müssen?
2- was habe ich falsch gemacht? Falsche Datei? Hätte es die /etc/profile oder die ~/.bashrc sein solllen? wenn ja warum?
Danke und Gruß
El
 
A

Anonymous

Gast
Siehe auch den anderen Beitrag hier http://www.linux-club.de/viewtopic.php?t=48014

Aliase können nicht exportiert werden wie zB Variable, das heißt, sie müssen in jeder Shell in der sie Gültigkeit haben sollen, geladen werden.

Jetzt haben wir vom Prinzip her 3 Shells.
1. Die Loginshell, sie wird nur einmal durchlaufen beim anmelden ( auch beim anmelden in der KDE) und dort durchwandert sie die /etc/profile und die ~/.profile und die Variablen die dort gesetzt werden, die werden an alle anderen Shells exportiert, die aus dieser Shell gestartet werden. Zusätzlich wird auch die ~./bashrc falls vorhanden hier noch durchlaufen.

2. die interaktive Shell. Das ist die Shell in der du einen Prompt bekommst und Eingaben machst. Sie ist wenn du dich zB mit ssh am Rechner anmeldest auch gleich deine Loginshell wird aber sonst erst durch eine Loginshell gestartet, und erbt erstmal von der Loginshell die exportierten Variablen, und durchläuft dann zusätzlich noch die /etc/bash.bashrc und wenn du hast auch noch die ~/.alias ,
Dort bekommt und sammelt so die Aliase ein, die du beim Eingeben der Befehle nutzen kannst.
Wenn du aus dieser shell erneut eine Shell startest einfach mit bash , dann werden wieder die Variabelen vererbt und die /etc/bash.bashrc und die ~/.alias und die ~/.bashrc wird für die neue Shell erneut durchlaufen, also sind die Aliase wieder alle dort aktiv.

3. der 3 Type Shell ist eine nichtinteraktive Shell, sie wird meist aus einer Loginshell oder einer anderen interaktiven Shell heraus gestartet und erhält von dort die exportierten Variablen. Diese Shell wird öfter gestartet, als man annimmt, denn bei jedem Start eines Scriptes oder bei einigen Befehlen die eigentlich nur ein Script sind, und auch bei verschiedenen Konstellationen von Komandos , wird jedesmal still und heimlich eine solche Subshell gestartet, ohne dass man etwas davon mitbekommt.

Wenn du also auf der Interaktiven Shell ein Alias haben möchtest dann nützt die ~./profile nur dann was, wenn diese Shell auch gleich deine Loginshell ist, ansonsten ist ~/.alias oder ~./bashrc der richtige Ort um so etwas zu konfigurieren.

du kannst das ganze recht einfach ausprobieren
bash -c set Umgebung einer normalen Subshell
bash -lc set Umgebung einer normalen Loginshell
bash -ic set Umgebung einer normalen Interaktiven Shell
bash -lic set Umgebung einer Interaktiven Loginshell

statt set kannst du auch alias verwenden um herauszufinden wo welcher Alias konfiguriert ist, einfach mal damit rumspielen und auch mal einige Änderungen an den Konfigurationsdateien vornehmen


robi
 

scg

Hacker
Bitte zukünftig beachten:
http://linux-club.de/viewtopic.php?t=30721

Ich ändere den Titel mal auf ...ähm, was weiß ich... "Gültigkeitsbereich von alias"
 
OP
E

El

Member
wenn also die .bashrc beschrieben habe, muss ich noch einmal eine konsole starten, damit der eintrag wirksam wird.
geht das auch eleganter? kann ich mit einem kommando die .bashrc neu einlesen lassen, damit in der konsole der neue alias wirksam wird?
 
A

Anonymous

Gast
geht das auch eleganter?
Code:
. ./bashrc
einfach Punkt Leerzeichen script
Dann wir dieses Script in der aktuellen shell ausgeführt und nicht eine Subshell dafür geöffnet. So kann man die aktuellen Änderungen für diese Dateien ohne das öffnen einer neuen Shell oder bei der Loginshell ohne sich neu anzumelden übernehmen.

robi
 

styyxx

Member
Hi robi,

das Standardverhalten der bash ist etwas anders.

Loginshell (egal ob interaktiv oder nicht):
Zuerst /etc/profile
Danach das erste von den folgenden Dateien:
~/.bash_profile
~/.bash_login
~/.profile
Beim beenden der Loginshell:
~/.bash_logout

Interaktive Shells die keine Loginshells sind:
~/.bashrc

Nichtinteraktive Shells werten die Umgebungsvariable BASH_ENV aus und lesen die dort angegebene Datei ein.

/etc/bash.bashrc, ~/.alias und was es da sonst noch so gibt, z.B. /etc/profile.local sind distributionsspezifisch und werden z.B. aus der /etc/profile eingelesen. Von denen sollte man auch die Finger lassen.

@EI
Prinzipiel fährst du wohl am besten wenn du in der ./profile (SUSE verwendet die normalerweise) wie von robi schon richtig gesagt die ~/.bashrc mittels . .bashrc (für den Punkt kannst du auch source nehmen, nur falls du das mal siehst) einliest und alles in die .bashrc packst.
Natürlich kannst du mittel des source Kommandos jede beliebige Datei einlesen. Also z.B. eine .meine_funktionen.

Grüße
styyxx
 
A

Anonymous

Gast
styyxx schrieb:
das Standardverhalten der bash ist etwas anders.

Loginshell (egal ob interaktiv oder nicht):
Zuerst /etc/profile
Danach das erste von den folgenden Dateien:
~/.bash_profile
~/.bash_login
~/.profile
Beim beenden der Loginshell:
~/.bash_logout

Interaktive Shells die keine Loginshells sind:
~/.bashrc

Die einzelnen Distibutoren scheinen da alles mögliche zusammenzukonfigurieren,
In den meisten "großen Nachlagewerken" steht entweder .bash-profile oder .bash_login oder .profile je nachem welche in dieser Reinfolge zuerst gefunden wird.
Das hat den Vorteil, dann man zB mit einsetzen einer .bash_login die komplette .profile nicht durchläuft und so spezielle Umgebungen komfortabel austauschen kann. Aber egal. im Zweifelsfall muss man das sowieso ausprobieren.

und interaktive Shells die keine Loginshell sind .bashrc
Mein Suse ist da auch schon wieder anderer Meinung, die wird entgegen aller Literatur und entgegen der Manpage schon von einer nichtinteraktiven Loginshell durchlaufen.

Also im Zweifelsfall immer selbst noch mal testen.

robi
 

Xenon

Member
towo schrieb:
alias cls='clear'

und das gehört in ~/.bashrc
Warum hier hin? Ich habe nachfolgende einträge gelesen aber ich verstehe es trotzdem nicht sorry... :???:
Überall wo man was zu linux liest heißt es pack deine sachen unter /etc/profile und diese werden dann für alle shells gesetzt...
Aber... hmm... warum unter bashrc???
 
A

Anonymous

Gast
Xenon schrieb:
Überall wo man was zu linux liest heißt es pack deine sachen unter /etc/profile und diese werden dann für alle shells gesetzt...
Bitte anhand von Schriftstücken nachweisen, glaube ich nicht, ;)
die /etc/profile ist heilig, wer in modernen Systemen da etwas ändert hat entweder sehr gewichtige Gründe und eine ganze Menge Ahnung, oder aber überhaupt keine Ahnung.
Wenn Änderungen unter /etc/profile dann muss man uA auch bedenken, das da noch ein ganzes Verzeichnis /etc/profile.d mit im Spiel ist, und das solche Änderungen mit dem nächsten Update eventuell schon wieder überschrieben werden. Sicherheitstechnisch ist es bei mir immer sehr beruigend, wenn die /etc/profile und andere Dateien aus diesem Basispaket die orginal Zeitstempel und die orginal md5sum aus dem Paket noch haben.

Wenn dort überhaupt globale Änderungen an den Profilen , dann eine /etc/profile.local anlegen, und das Zeug dort rein.


Xenon schrieb:
Aber... hmm... warum unter bashrc???
* Aliase brauchst du nur in einer interaktiven Shell
* Aliase sind nicht exportierbar müssen also in der Shell definiert werden, in der sie gebraucht werden.
* die /etc/bash.bashrc und die ~/.bashrc sind die Dateien die bei interaktiven Shells durchlaufen wird.

robi
 
Oben