{"id":1549,"date":"2014-02-23T08:45:17","date_gmt":"2014-02-23T07:45:17","guid":{"rendered":"http:\/\/speefak.spdns.de\/oss_lifestyle\/?p=1549"},"modified":"2024-06-02T14:36:43","modified_gmt":"2024-06-02T12:36:43","slug":"bash-bourne-again-shell-history-konfigurieren","status":"publish","type":"post","link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/bash-bourne-again-shell-history-konfigurieren\/","title":{"rendered":"Bash ( Bourne Again SHell ) History konfigurieren"},"content":{"rendered":"<p>Die bash-Shell ist inzwischen die meist genutzte Consolen-Shell unter Linux\/Unix. Das geht schon so weit, dass Start-Scripte direkt f\u00fcr die Bash geschrieben sind, oder gar der Befehl \/bin\/sh nur noch ein Link auf \/bin\/bash ist.<\/p>\n<hr \/>\n<h2>Bash-History richtig nutzen<\/h2>\n<p>Die Bash verf\u00fcgt \u00fcber eine Art Erinnerungsverm\u00f6gen: Sie merkt sich, welche Befehle man bereits eingegeben hat. Wenn man einen langen Befehl nicht noch einmal eingeben will, kann man sich einfach mit den Pfeiltasten durch die gespeicherten Befehle hangeln und den Befehl wieder ausf\u00fchren. Aber das Erinnerungsverm\u00f6gen der Bash kann noch mehr.<\/p>\n<p>Mit <em>history<\/em> kann man sich eine Liste von allen Befehlen anzeigen lassen, abh\u00e4ngig davon f\u00fcr wie viele Eingabenaufzeichnungen die Bash konfiguriert wurde (.s Konfiguration)<\/p>\n<pre>$ history\r\n[...]\r\n  504  cd \/home\/antu\r\n  505  ls -la\r\n  506  htop\r\n  507  cd \/\r\n  508  history<\/pre>\n<p>Dabei z\u00e4hlt die Bash immer mit, wie viele Befehle sich bereits in der Datenbank befinden, in diesem Fall sind es 508. Praktisch: Gibt man jetzt !&lt;Zahl&gt; ein, wird der Befehl mit der entsprechenden Zahl wieder ausgef\u00fchrt.<\/p>\n<p>Wenn man Strg+R dr\u00fcckt, muss man nur noch den Anfang des Befehls eingeben, wenn er schon einmal eingegeben wurde, vervollst\u00e4ndigt die Bash ihn automatisch.<\/p>\n<hr \/>\n<h2>Konfiguration<\/h2>\n<p>Das Verhalten der Erinnerungsfunktion l\u00e4sst sich entweder in der systemweiten, meist \/etc\/bashrc bzw. \/etc\/bash\/bashrc, oder in der Konfigurationsdatei im Home-Verzeichnis (~\/.bashrc, ~\/.bash_profile) konfigurieren.<\/p>\n<p>Mit shopt lassen sich diverse Einstellungen der Bash ver\u00e4ndern. Histappend sorgt daf\u00fcr, dass die eingegebenen Befehle beim Beenden der Bash an die Liste der eingegebenen Befehle angehangen werden, anstatt die Liste jedes Mal zu \u00fcberschreiben.<\/p>\n<ul>\n<li>\n<pre>shopt -s histappend<\/pre>\n<\/li>\n<\/ul>\n<p>Mit den folgenden Parametern wird festgelegt, wie viele Befehle gespeichert werden sollen, standardm\u00e4\u00dfig ist meistens 500 eingestellt.<\/p>\n<ul>\n<li>\n<pre>export HISTSIZE=&lt;Gr\u00f6\u00dfe&gt;\r\nexport HISTFILESIZE=&lt;Gr\u00f6\u00dfe&gt;<\/pre>\n<\/li>\n<\/ul>\n<p>Mit HISTIGNORE lassen sich Befehle festlegen, die nicht gespeichert werden sollen. Die Befehle werden durch einen Doppelpunkt getrennt. Der Befehl hier im Beispiel sorgt daf\u00fcr, das alle Befehle, die mit cd oder ls beginnen, nicht gespeichert werden<\/p>\n<ul>\n<li>\n<pre>export HISTIGNORE='cd*:ls*'<\/pre>\n<\/li>\n<\/ul>\n<p>Eine durch Doppelpunkte getrennte Liste von Optionen zur Speicherung von Befehlen. Wenn ignorespace aktiviert ist, werden alle eingegeben Zeilen, die mit einem Leerzeichen beginnen, nicht gespeichert, erasedups sorgt daf\u00fcr, dass jeder Befehl nur einmal in der Bash-Erinnerung vorkommt. Mit ignoredups l\u00e4sst sich festlegen, dass ein eingegebener Befehl nur einmal gespeichert wird, auch wenn er mehrmals hintereinander eingegeben wird. ignoreboth ist dasselbe wie ignorespace + ignoredups.<\/p>\n<ul>\n<li>\n<pre>export HISTCONTROL=erasedups:ignorespace<\/pre>\n<\/li>\n<\/ul>\n<p>Die eingegebenen Befehle werden standardm\u00e4\u00dfig in der ~\/.bash_history gespeichert, wenn man sie woanders speichern will kann man das mit HISTFILE festlegen.<\/p>\n<ul>\n<li>\n<pre>export HISTFILE='~\/.bash_history'<\/pre>\n<\/li>\n<\/ul>\n<p>Wird folgende Variable gesetzt, wird zu jedem eingegebenen Befehl auch die Uhrzeit gespeichert. Der Wert von HISTTIMEFORMAT wird verwendet, um die Zeit zu formatieren, mehr Informationen dazu finden sich in der Manpage von strftime (man 3 strftime).<\/p>\n<ul>\n<li>\n<pre>export HISTTIMEFORMAT='%d.%m.%Y %T '<\/pre>\n<\/li>\n<li>\n<pre>  530  07.12.2008 13:22:18 export HISTTIMEFORMAT='%d.%m.%Y %T '\r\n  531  07.12.2008 13:22:28 history<\/pre>\n<\/li>\n<\/ul>\n<hr \/>\n<h2>Befehle in Echtzeit speichern<\/h2>\n<p>Die Bash speichert die eingegebenen Befehle erst, wenn sie beendet wird, deswegen werden die Befehle anderer Bash-Sitzungen nicht angezeigt, wenn man mehrere Bashs gleichzeitig laufen hat. Aber da gibt es einen kleinen Trick, denn man kann den Prompt so ver\u00e4ndern, dass er die Erinnerung bei jeder neuen Eingabe speichert und neu einliest. Dazu werden die beiden Befehle history -a (Befehle in der History speichern) und history -r (History-Datei neu einlesen) verwendet.<\/p>\n<p>Um die Echtzeiterinnerungsfunktion der Bash zu aktivieren, werden die beiden Befehle einfach nur zum lokalen (~\/.bashrc) oder globalen (\/etc\/profile) Bash Prompt hinzuf\u00fcgt.<\/p>\n<ul>\n<li>\n<pre># activate realtime history\r\nexport PROMPT_COMMAND=\"history -a; history -r; $PROMPT_COMMAND\"<\/pre>\n<\/li>\n<\/ul>\n<hr \/>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2821 alignleft\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2014\/08\/CC_BY_NC_SA.png\" alt=\"CC_BY_NC_SA\" width=\"65\" height=\"23\" \/>by Speefak<\/p>\n<hr \/>\n","protected":false},"excerpt":{"rendered":"<p>Die bash-Shell ist inzwischen die meist genutzte Consolen-Shell unter Linux\/Unix. Das geht schon so weit, dass Start-Scripte direkt f\u00fcr die Bash geschrieben sind, oder gar der Befehl \/bin\/sh nur noch ein Link auf \/bin\/bash ist. Bash-History richtig nutzen Die Bash verf\u00fcgt \u00fcber eine Art Erinnerungsverm\u00f6gen: Sie merkt sich, welche Befehle man bereits eingegeben hat. Wenn [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,26,54],"tags":[],"class_list":["post-1549","post","type-post","status-publish","format-standard","hentry","category-bash","category-linux","category-shell-programme"],"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"speefak","author_link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/author\/speefak_oss\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/bash\/\" rel=\"category tag\">Bash<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/linux\/\" rel=\"category tag\">Linux<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/shell-programme\/\" rel=\"category tag\">Shell<\/a>","rttpg_excerpt":"Die bash-Shell ist inzwischen die meist genutzte Consolen-Shell unter Linux\/Unix. Das geht schon so weit, dass Start-Scripte direkt f\u00fcr die Bash geschrieben sind, oder gar der Befehl \/bin\/sh nur noch ein Link auf \/bin\/bash ist. Bash-History richtig nutzen Die Bash verf\u00fcgt \u00fcber eine Art Erinnerungsverm\u00f6gen: Sie merkt sich, welche Befehle man bereits eingegeben hat. Wenn&hellip;","_links":{"self":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/1549","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/comments?post=1549"}],"version-history":[{"count":0,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/1549\/revisions"}],"wp:attachment":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/media?parent=1549"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/categories?post=1549"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/tags?post=1549"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}