Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?
26.05.2020, 13:05:22

.
Einloggen mit Benutzername, Passwort und Sitzungslänge

Mitglieder
Statistiken
  • Beiträge insgesamt: 662463
  • Themen insgesamt: 53576
  • Heute online: 485
  • Am meisten online: 2287
  • (22.01.2020, 19:20:24)
Benutzer Online

Autor Thema: [gelöst]  Terminal / bash löscht letztes Kommando aus History  (Gelesen 221 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

[gelöst] Terminal / bash löscht letztes Kommando aus History
« am: 13.05.2020, 14:52:51 »
Moin, ich habe eine Frage zur History  in der Bash.

Wenn man einen Befehl eingibt,  dann Enter drückt, der Befehl ne Weile läuft, und man ihn währenddessen abbricht, dann ist dieser Befehl nicht in der History der Bash drin.

Ich sehe das Verhalten, wenn man einen Ausdruck mit Klammer tippt, z.b. :
# ( sleep 10 )
D.h. ich kann ihn mit Cursor-Hoch nicht erreichen.

Weiß jemand wie man das Löschen abschalten kann ? (so dass der Befehl durch Cursor-Hoch erreichbar ist) ?
« Letzte Änderung: 13.05.2020, 18:29:30 von liquidnight »

Re: Terminal / bash löscht letztes Kommando aus History
« Antwort #1 am: 13.05.2020, 15:25:37 »
das kann durchaus sein, dass der wegen Abbruch nicht drin ist.

Wenn du einen Befehl aus der History nimmst, durch Pfeiltaste hoch und den abänderst, bzw. mit der Rücktaste löschst, verschwindet dieser übrigens auch aus der History. Nur durchgeführte Befehle stehen da drin.

Ist manchmal aber auch irritierend, wenn du z.B. einen Befehl in einem zweiten geöffneten Terminalfenster ausgeführt hast. Der steht dann im anderen Terminalfenster erst dann zur Verfügung, sobald das zweite Fenster geschlossen wird. Erst nach dem Schließen von Terminalfenstern werden die Befehle in die ~/.bash_history abgelegt.

Re: Terminal / bash löscht letztes Kommando aus History
« Antwort #2 am: 13.05.2020, 16:41:55 »
Mintversion? Desktop?

Das Verhalten kann ich unter LM 19.3/64 Cinnamon nicht nachvollziehen (gnome-terminal, GNU bash, Version 4.4.20(1)-release).

Die eingegebenen Befehle werden erst nach Beenden des Terminals in die .bash_history eingetragen:
test@lm19-3-cinnamon:~$ cat .bash_history
test@lm19-3-cinnamon:~$ sleep 1
test@lm19-3-cinnamon:~$ (sleep 10)
^C
test@lm19-3-cinnamon:~$ cat .bash_history
test@lm19-3-cinnamon:~$

Bleibt das Terminal weiter geöffnet, werden mit der Hochtaste alle zuvor eingegebenen Befehle angezeigt, auch der in Klammern gesetzte.

Nach dem Schließen und mit Öffnen eines neuen Terminals sind sie weiterhin verfügbar:
test@lm19-3-cinnamon:~$ cat .bash_history
cat .bash_history
sleep 1
(sleep 10)
cat .bash_history

Um kurzfristig einen bestimmten Eintrag in die History zu verhindern, ist mir nur ein Weg bekannt: Der Befehl muss mit einem <Leerzeichen> beginnen.

Re: Terminal / bash löscht letztes Kommando aus History
« Antwort #3 am: 13.05.2020, 16:52:49 »
# ( sleep 10 )
Könnte es sein, dass es sich dabei um ein Root-Terminal (#) handelt?
/root hat seine eigene .bash_history root@TinaT:/home/user# cat /root/.bash_history
uid
id
exit
« Letzte Änderung: 13.05.2020, 17:06:43 von aexe »

Re: Terminal / bash löscht letztes Kommando aus History
« Antwort #4 am: 13.05.2020, 17:07:07 »
Das Verhalten ist beinahe identisch zu dem oben geschriebenen, mit dem Unterschied, dass der Eintrag in die .bash_history (von root) bereits beim Verlassen der Umgebung mit exit erfolgt und das Terminal nicht geschlossen werden muss.
test@lm19-3-cinnamon:~$ sudo su
root@lm19-3-cinnamon:/home/test# cat /root/.bash_history
(sleep 100)
exit

Re: Terminal / bash löscht letztes Kommando aus History
« Antwort #5 am: 13.05.2020, 17:19:45 »
Ja, aber ein wenig mehr Angaben zum Sachverhalt bei liquidnight wäre trotzdem wünschenswert.
Zum Beispiel auch das Zeigen des Text im Terminal inklusive Prompt und Eingabe in einem Codeblock.
Sonst kann man nur spekulieren.

Re: Terminal / bash löscht letztes Kommando aus History
« Antwort #6 am: 13.05.2020, 18:13:44 »
> Mintversion? Desktop?
Linux Mint 19.3 Cinnamon  4.4.8

Damit ist das Problem   eingegrenzt:
> Um kurzfristig einen bestimmten Eintrag in die History zu verhindern, ist mir nur ein Weg bekannt: Der Befehl muss mit einem <Leerzeichen> beginnen.

Das ist wohl die Lösung, danke.

Das Problem trat auf unter diesem Desktop, jedoch   rxvt-unicode (urxvt) v9.22 - released: 2016-01-23


* Gnome-Terminal nimmt den Befehl sowohl mit als auch Ohne Leerzeichen bei Abbruch in die History.
* Urxvt nimmt den Befehl nur ohne führendes Leerzeichen bei Abbruch in die History.


Re: Terminal / bash löscht letztes Kommando aus History
« Antwort #7 am: 14.05.2020, 07:41:23 »
Gnome-Terminal nimmt den Befehl sowohl mit als auch Ohne Leerzeichen bei Abbruch in die History.
Ich weiß ja nicht, was du an deinem System so rumgebastelt hast, aber auch das kann ich hier nicht nachvollziehen.

Ein Befehl, eingeleitet mit einem Leerzeichen, kann im laufenden Terminal nicht mit <Cursor Hoch> (Alternativ <Strg>+<P>) wieder aufgerufen werden und wird beim Beenden des Terminals auch nicht in die History eingetragen. Egal, ob der Befehl abgebrochen wurde oder nicht.

"man bash" sagt dazu:
Zitat
HISTCONTROL
              A colon-separated list of values controlling  how  commands  are
              saved  on  the  history  list.   If  the list of values includes
              ignorespace, lines which begin with a space  character  are  not
              saved  in  the history list.

Wenn es bei dir also nicht so ist, dann dürftest du diesbezüglich etwas verändert haben. Zumindest bei allen von mir verwendeten Systemen wird von Haus aus ein Befehl mit führendem Leerzeichen ignoriert.

Edit:
Der dazugehörige Eintrag in ~/.bashrc lautet ootb:
test@vm-lm-19-3-c:~$ cat ~/.bashrc | grep -i histcontrol
HISTCONTROL=ignoreboth
(bezieht sich auf "ignorespace" und "ignoredups"). Ignoriert werden sollen also Befehle, die mit einem Leerzeichen beginnen und Duplikate (10 x hintereinander der gleiche Befehl = 1 Eintrag).

« Letzte Änderung: 14.05.2020, 09:28:19 von ZeckeSZ »