Bash: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
Keine Bearbeitungszusammenfassung
(→‎Nützliche Shortcuts: Vorlage „taste“ eingebaut)
(10 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 9: Zeile 9:
„ps“ listet Prozesse auf, „-o cmd=“ definiert, dass nur der Prozessname angezeigt werden soll, und „-p“ definiert, dass nur der Prozess angezeigt werden soll, dessen Prozess-ID man angibt. „$$“ gibt die ID des aktuellen Prozesses zurück. Da die Shell ebenfalls als Prozess gesehen wird, gibt „$$“ die Prozess-ID der Shell zurück, in der man sich gerade befindet.
„ps“ listet Prozesse auf, „-o cmd=“ definiert, dass nur der Prozessname angezeigt werden soll, und „-p“ definiert, dass nur der Prozess angezeigt werden soll, dessen Prozess-ID man angibt. „$$“ gibt die ID des aktuellen Prozesses zurück. Da die Shell ebenfalls als Prozess gesehen wird, gibt „$$“ die Prozess-ID der Shell zurück, in der man sich gerade befindet.


$ ps -o cmd= -p $$
{{hc|ps -o cmd= -p $$|bash}}
bash
$


Wenn man nun wissen will, welche bash-Version man verwendet, bedient man sich des Parameters „--version“
Wenn man nun wissen will, welche bash-Version man verwendet, bedient man sich des Parameters „--version“


$ bash --version
{{hc|bash --version|GNU bash, version 3.2.48(1)-release (i686-pc-linux-gnu)
GNU bash, version 3.2.48(1)-release (i686-pc-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.}}
Copyright (C) 2007 Free Software Foundation, Inc.
$


Die Bash gilt generell als sehr komplex, und wird von einigen Anwendern auch als etwas unhandlich beschrieben, ist allerdings dennoch quasi die Standard-Shell unter Linux. Sie ist vollständig zur „Original-Shell“ (sh) kompatibel und unterstützt viele Befehle der Korn-Shell (ksh) und der Z-Shell (zsh).
Die Bash gilt generell als sehr komplex, und wird von einigen Anwendern auch als etwas unhandlich beschrieben, ist allerdings dennoch quasi die Standard-Shell unter Linux. Sie ist vollständig zur „Original-Shell“ (sh) kompatibel und unterstützt viele Befehle der Korn-Shell (ksh) und der Z-Shell (zsh).
Zeile 96: Zeile 92:


  $ bash -rcfile /pfad/zur/rc-datei
  $ bash -rcfile /pfad/zur/rc-datei
== Nützliche Shortcuts ==
{| {{prettytable}}
|-
! {{taste|ESC}} + Taste || Funktion
|-
| {{taste|ESC}} {{taste|d}} || löschen von der Cursorposition aus bis zum Ende des Wortes
|-
| {{taste|ESC}} {{taste|f}} || Cursor ein Wort vor
|-
| {{taste|ESC}} {{taste|b}} || Cursor ein Wort zurück
|-
| {{taste|ESC}} {{taste|t}} || Zwei nebeneinanderstehende Wörter gegeneinander austauschen. (Bar Foo wird zu Foo Bar)
|-
!  {{taste|TAB}} + {{taste|TAB}} || Funktion
|-
| {{taste|TAB}} {{taste|TAB}} || listet alle verfügbaren Befehle auf
|-
| /  {{taste|TAB}} {{taste|TAB}} || listet alle verfügbaren Verzeichnisse auf (z.B.: /etc/ {{taste|TAB}}{{taste|TAB}}würde alle in /etc/ verfügbaren Verzeichnisse auflisten)
|-
| ~ {{taste|TAB}} {{taste|TAB}} ||  zeigt alle System Nutzer an
|-
| $  {{taste|TAB}} {{taste|TAB}} || Liste aller Systemvariablen
|-
| @ {{taste|TAB}} {{taste|TAB}} || zeigt Hosts an
|-
| =  {{taste|TAB}} {{taste|TAB}} || hat den selben Effekt wie <code>ls</code>
|-
! {{taste|ALT}} + Taste || Funktion
|-
| {{taste|ALT}} {{taste|<}} || zeigt die erste Zeile in der bash history an
|-
| {{taste|ALT}} {{taste|>}} ||  zeigt die letzte Zeile in der bash history an
|-
| {{taste|ALT}} {{taste|.}} || fügt das letzte Argument an das Kommando an
|-
| {{taste|ALT}} {{taste|b}} || bewegt den Cursor ein Wort rückwärts
|-
| {{taste|ALT}} {{taste|f}} || bewegt den Cursor ein Wort vorwärts
|-
| {{taste|ALT}} {{taste|t}} || Tauscht zwei nebeneinderstehende Wörter gegeneinander (Bar Foo wird Foo Bar)
|-
| {{taste|ALT}} {{taste|u}} || wandelt ein Wort von Kleinbuchstaben in Großbuchstaben um ($display wird zu $DISPLAY)
|-
| {{taste|ALT}} {{taste|l}} || wandelt ein Wort von Großbuchstaben in Kleinbuchstaben um (ECHO wird zu echo)
|-
| {{taste|ALT}} {{taste|c}} || wandelt den Anfangsbuchstaben von Kleinbuchstaben in Großbuchstaben um (verzeichnisname wird zu Verzeichnisname)
|-
| {{taste|ALT}} {{taste|backspace}} || löscht ein komplettes Wort rückwärts
|-
! {{taste|STRG}} + Taste || Funktion
|-
| {{taste|STRG}} {{taste|a}} || bewegt den Cursor zum Zeilenanfang
|-
| {{taste|STRG}} {{taste|e}} || bewegt den Cursor zum Zeilenende
|-
| {{taste|STRG}} {{taste|k}} || löscht alles von der Cursorposition bis Zeilenende
|-
| {{taste|STRG}} {{taste|u}} || löscht alles von der Cursorposition bis Zeilenanfang
|-
| {{taste|STRG}} {{taste|w}} || löscht vorangegangenes Wort (foo bar wird foo )
|-
| {{taste|STRG}} {{taste|t}} || vertauscht zwei Buchstaben gegeneinander (foobra wird foobar)
|-
| {{taste|STRG}} {{taste|y}} || stellt zuletzt gelöschtes wieder her, bzW. fügt es ein
|-
| {{taste|STRG}} {{taste|d}} || löscht ein Zeichen unter dem Cursor
|-
| {{taste|STRG}} {{taste|h}} || löscht ein Zeichen vor dem Cursor
|-
| {{taste|STRG}} {{taste|f}} || bewegt den Cursor vorwärts
|-
| {{taste|STRG}} {{taste|b}} || bewegt den Cursor rückwärts
|-
| {{taste|STRG}} {{taste|r}} || findet eine Buchstabensequenz in der History
|-
| {{taste|STRG}} {{taste|s}} || sperrt die Eingabe
|-
| {{taste|STRG}} {{taste|q}} || entsperrt die Eingabe wieder
|-
| {{taste|STRG}} {{taste|l}} || hat den selben Effekt wie {{ic|clear}}
|-
! Diverses || Funktion
|-
| foobar {{taste|1=!}}{{taste|!}} || stellt dem zuvor abgesetzten Kommando ''foobar'' voran. ({{ic|[[pacman]] -Syu}} wird {{ic|''sudo'' [[pacman]] -Syu}})
|-
| {{taste|^}}foo{{taste|^}}bar || ersetzt das erste auftauchende ''foo'' im zuvor abgesetzten Kommando durch ''bar''. ({{ic|ls /home/''foo''/foo/}} wird {{ic|ls /home/''bar''/foo/}}).
|}


== Siehe auch ==
== Siehe auch ==
Zeile 102: Zeile 185:
* [[Bash-Prompt anpassen|Ausführliche Anleitung zum Verändern des Prompts]]
* [[Bash-Prompt anpassen|Ausführliche Anleitung zum Verändern des Prompts]]
* [[Umleitungen|Wiki-Artikel zur Ein- und Ausgabeumleitung]]
* [[Umleitungen|Wiki-Artikel zur Ein- und Ausgabeumleitung]]
* [[Shell-Spickzettel|Wiki-Artikel zur Shell Kurzreferenz]]


== Weblinks ==
== Weblinks ==

Version vom 18. September 2013, 12:12 Uhr

Um mit dem Betriebssystem zu interagieren, und teilweise auch, damit das Betriebssystem selbst arbeiten kann, bedarf es eines Interpreter-Programms, das die eingegebenen Befehle an das System weiterreicht. Unter Unix, und unix-verwandten Systemen wird dieser Kommandozeileninterpreter Shell genannt. Unter Arch ist diese Shell standardmäßig die Bash.

Über die bash

Wenn man ein System installiert, installiert man auch gleich die bash mit, da sie ein wichtiger Teil des Systems ist. Um nach dem Einloggen zu sehen, welche Shell man gerade benutzt, kann man sich zum Beispiel folgenden Befehls bedienen:

ps -o cmd= -p $$

„ps“ listet Prozesse auf, „-o cmd=“ definiert, dass nur der Prozessname angezeigt werden soll, und „-p“ definiert, dass nur der Prozess angezeigt werden soll, dessen Prozess-ID man angibt. „$$“ gibt die ID des aktuellen Prozesses zurück. Da die Shell ebenfalls als Prozess gesehen wird, gibt „$$“ die Prozess-ID der Shell zurück, in der man sich gerade befindet.

ps -o cmd= -p $$
bash

Wenn man nun wissen will, welche bash-Version man verwendet, bedient man sich des Parameters „--version“

bash --version
GNU bash, version 3.2.48(1)-release (i686-pc-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.

Die Bash gilt generell als sehr komplex, und wird von einigen Anwendern auch als etwas unhandlich beschrieben, ist allerdings dennoch quasi die Standard-Shell unter Linux. Sie ist vollständig zur „Original-Shell“ (sh) kompatibel und unterstützt viele Befehle der Korn-Shell (ksh) und der Z-Shell (zsh).

Verwendung

Wie bereits angesprochen ist die bash die Standard-Shell unter Arch. Von daher bedarf es keiner sonderlichen Maßnahmen, um die Bash zu verwenden, einfaches einloggen reicht. Unter grafischen Umgebungen erreicht man die bash über einen Terminal-Emulator wie xterm, Konsole, gnome-terminal, Urxvt etc.

Um die bash explizit zu starten, benutzt man einfach den Befehl „bash“, nachfolgende Befehlsfolge verdeutlicht dies.

$ echo $$ # Die PID der aktuellen Shell ausgeben
5450
$ bash
$ echo $$
5711
$ exit
exit
$ echo $$
5450
$

Zuerst wird die Prozess-ID der aktuellen Shell angezeigt, dann wird die bash gestartet, und die Prozess-ID erneut angezeigt, dies ist nun eine andere als beim ersten Mal, da man sich ja nicht mehr in der ersten bash befindet. Die bash wird dann verlassen, und man befindet sich wieder in der bash, mit der man angefangen hat.

Da die bash selbst ja ein Kommandointerpreter ist, bietet sie selbst keine eigenen Programmfunktionen, außer eben dem Interpretieren und Weiterreichen von Befehlen, und dem Zurückreichen des Ergebnisses. Allerdings lässt sich die bash durch viele Skripte, Parameter, und Konfigurationen – zum Beispiel in der bashrc – stark an die eigenen Bedürfnisse anpassen.

Beispiele

Nachfolgend drei praxisnahe Beispielverwendungen der verschiedenen bash-Aufrufe. In dem Wiki-Artikel zur .bashrc sind weitere Beispiele aufgeführt, die zeigen, wie man sich die bash anpassen kann.

Shellscript

Wenn man ein Shellscript schreibt, kann man am Anfang der Datei mit dem sogenannten „Shebang“ bestimmen, dass die bash verwendet werden soll.

#!/bin/bash
echo $$

… dann der Aufruf …

$ echo $$
6577
$ chmod +x script
$ ./script
6604
$ echo $$
6577
$

Für das Script wird eine eigene Bash gestartet, innerhalb dieser das Script dann abgearbeitet wird. Nach Beendigung des Scriptes wird diese bash wieder verlassen.

Befehlsübergabe

Anstatt mittels Shellscript kann man an die bash beim Aufruf auch Befehle übergeben, die dann im Kontext dieser bash abgearbeitet werden. Danach wird die bash wieder verlassen.

$ echo $$
6222
$ bash -c 'echo $$'
6240
$ echo $$
6222
$ 

Im Kontext der aufgerufenen Bash wird der echo-Befehl ausgeführt. Wenn man die Angabe nach „-c“ in doppelte Anführungszeichen setzen würde, würde die bash diese vor dem Aufrufen schon bearbeiten, und „$$“ durch die aktuelle Prozess-ID ersetzen. Durch die einfachen Anführungszeichen wird der Befehl ungeparst übergeben.

Andere Konfigurationsdateien

Vermutlich hat man sich seine bash durch die Standard-Konfigurationsdateien angepasst. Wenn man nun etwas testen möchte, und sichergehen will, dass dies auch ohne die eigenen Anpassungen funktioniert, ruft man sich eine bash auf, wo dies deaktiviert ist.

$ myip
91.00.00.51
$ bash --norc --noprofile
$ myip
bash: myip: command not found
$ exit
exit
$ myip
91.00.00.51
$

Mit diesem Aufruf werden sowohl die Datei „.bashrc“ als auch die Datei „.bash_profile“ ignoriert, welche bei mir nichts weiter macht, als die „.bashrc“ auszuführen.

Man kann sich auch eine weitere „.bashrc“ anlegen, und der bash mittels Parameter mitteilen, diese, anstatt der Standard-Datei zu verwenden.

$ bash -rcfile /pfad/zur/rc-datei

Nützliche Shortcuts

ESC + Taste Funktion
ESC d löschen von der Cursorposition aus bis zum Ende des Wortes
ESC f Cursor ein Wort vor
ESC b Cursor ein Wort zurück
ESC t Zwei nebeneinanderstehende Wörter gegeneinander austauschen. (Bar Foo wird zu Foo Bar)
Tab ↹ + Tab ↹ Funktion
Tab ↹ Tab ↹ listet alle verfügbaren Befehle auf
/ Tab ↹ Tab ↹ listet alle verfügbaren Verzeichnisse auf (z.B.: /etc/ Tab ↹Tab ↹würde alle in /etc/ verfügbaren Verzeichnisse auflisten)
~ Tab ↹ Tab ↹ zeigt alle System Nutzer an
$ Tab ↹ Tab ↹ Liste aller Systemvariablen
@ Tab ↹ Tab ↹ zeigt Hosts an
= Tab ↹ Tab ↹ hat den selben Effekt wie ls
ALT + Taste Funktion
ALT < zeigt die erste Zeile in der bash history an
ALT > zeigt die letzte Zeile in der bash history an
ALT . fügt das letzte Argument an das Kommando an
ALT b bewegt den Cursor ein Wort rückwärts
ALT f bewegt den Cursor ein Wort vorwärts
ALT t Tauscht zwei nebeneinderstehende Wörter gegeneinander (Bar Foo wird Foo Bar)
ALT u wandelt ein Wort von Kleinbuchstaben in Großbuchstaben um ($display wird zu $DISPLAY)
ALT l wandelt ein Wort von Großbuchstaben in Kleinbuchstaben um (ECHO wird zu echo)
ALT c wandelt den Anfangsbuchstaben von Kleinbuchstaben in Großbuchstaben um (verzeichnisname wird zu Verzeichnisname)
ALT ← Löschen löscht ein komplettes Wort rückwärts
STRG + Taste Funktion
STRG a bewegt den Cursor zum Zeilenanfang
STRG e bewegt den Cursor zum Zeilenende
STRG k löscht alles von der Cursorposition bis Zeilenende
STRG u löscht alles von der Cursorposition bis Zeilenanfang
STRG w löscht vorangegangenes Wort (foo bar wird foo )
STRG t vertauscht zwei Buchstaben gegeneinander (foobra wird foobar)
STRG y stellt zuletzt gelöschtes wieder her, bzW. fügt es ein
STRG d löscht ein Zeichen unter dem Cursor
STRG h löscht ein Zeichen vor dem Cursor
STRG f bewegt den Cursor vorwärts
STRG b bewegt den Cursor rückwärts
STRG r findet eine Buchstabensequenz in der History
STRG s sperrt die Eingabe
STRG q entsperrt die Eingabe wieder
STRG l hat den selben Effekt wie clear
Diverses Funktion
foobar !! stellt dem zuvor abgesetzten Kommando foobar voran. (pacman -Syu wird sudo pacman -Syu)
^foo^bar ersetzt das erste auftauchende foo im zuvor abgesetzten Kommando durch bar. (ls /home/foo/foo/ wird ls /home/bar/foo/).

Siehe auch

Weblinks