Ich will meine Bash_history anpassen.
Jeder Bash_history eintrag soll mit einer Eingabe: input(read ja nein) versehen werden.
Es soll jede Zeile (zur Zeit ~ 2000 mit dem input versehen werden!
Könnt ihr mir da helfen und ein Script posten?
Anmeldungsdatum: Beiträge: 292 |
Ich will meine Bash_history anpassen. Jeder Bash_history eintrag soll mit einer Eingabe: input(read ja nein) versehen werden. Es soll jede Zeile (zur Zeit ~ 2000 mit dem input versehen werden! Könnt ihr mir da helfen und ein Script posten? |
||||
Projektleitung
Anmeldungsdatum: Beiträge: 12801 |
Das Format der Datei ist vorgegeben. Was genau willst Du erreichen? Poste doch mal ein Beispiel für ein paar originale Einträge und die veränderte Form. Was auch immer Du machst, es wird natürlich immer wieder von der Shell überschrieben bzw. genauer, neue Einträge werden hinzugefügt, die nicht die Änderungen enthalten.
Dafür müssten wir erst mal verstehen, was Du erreichen möchtest. |
||||
Anmeldungsdatum: Beiträge: 11176 Wohnort: München |
Generell könnte man so den String "input(read ja nein) " an den Anfang jeder Zeile in einer Datei schreiben: sed 's/^/input(read ja nein) /' Datei
Wenn du sed dann noch den Schalter |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 292 |
Ein jetziger Eintrag skypeforlinux der neue Eintrag soll etwa so aussehen Willst du SkypeforLinux neustarten Ja/nein SkypeforLinux soll dann starten |
||||
Anmeldungsdatum: Beiträge: 11176 Wohnort: München |
Mir ist noch nicht ganz klar, wie da die bash_history ins Spiel kommt - da genügt doch ein kleines Skript oder eine in der ~/.bashrc definierte Funktion, die die Abfrage(n) für dich macht (wozu braucht es da eigentlich überhaupt eine Abfrage, wenn man einen eindeutig benannten Befehl haben kann?) und dann die gewünschte Aktion vornimmt. |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 292 |
Es gibt einige Befehle die übles anrichten wenn man Sie zweimal ausführt |
||||
Anmeldungsdatum: Beiträge: 10955 |
Hej Rachengold, das macht doch gar keinen Sinn. Du befindest Dich im Terminal (um einenen Befehl auszuführen), suchst ihn mit entsprechender Einstellung der ~/.bashrc und führst ihn aus. Punkt. Was soll da diese nervige Abfrage: Willst Du? Wirklich? Ganz bestimmt? Gruß black tencate |
||||
Anmeldungsdatum: Beiträge: 11176 Wohnort: München |
Wenn es dir um Prozesskontrolle geht, kannst du den Start von Programmen als Dienste über systemd/User Units realisieren. Dadurch wird versehentliches mehrfaches Starten verhindert, solange du immer den Weg über systemd gehst. Ansonsten kann ggf. ein Wrapper-Skript helfen, dass vorher prüft, ob die Voraussetzungen gegeben sind (z.B. kein bereits laufender Prozess mit einem bestimmten Namen, pid-Dateien usw.) und ansonsten mit einer Fehlermeldung abbricht. |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 292 |
Das Problem ich habe mehr als 1000 Einträge in der bash_history |
||||
Anmeldungsdatum: Beiträge: 11176 Wohnort: München |
Die bash_history ist einfach eine Sammlung der zuletzt abgesetzten Befehle (die Zahl der gespeicherten Einträge lässt sich über die Variable HISTSIZE anpassen, vgl. Bash (Abschnitt „History“)), sie ist nicht wirklich dazu geeignet zu prüfen, ob ein Befehl seit dem letzten Neustart ausgeführt wurde und kann bei mehreren parallel laufenden Shell-Sessions ungewollt überschrieben werden, wenn man da keine speziellen Vorkehrungen trifft. Man kann sie gezielt durchsuchen (1000 Zeilen zu durchsuchen dauert weniger als einen Wimpernschlag), nicht nur darin Zeile für Zeile blättern. Kannst du das grundlegende Problem, das du lösen willst mal genauer beschreiben? |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 292 |
seahawk1986 Ich hatte in der bash_history gescrollt, dabei schnappte ich einen Befehl der übles anrichtete. Ich hatte natürlich 'Enter' gedrückt. Jetzt will ich das verhindern Dazu die Ja/nein Abfrage. Wer kann mir beim anpassen der bash_history helfen? |
||||
Anmeldungsdatum: Beiträge: 11176 Wohnort: München |
Enter drückt man halt nicht einfach so... Man kann sich prinzipiell wie in https://askubuntu.com/a/22256 gezeigt einklinken, um so eine Abfrage vor Ausführung jedes eingegebenen Befehls ausführen zu lassen. Ich halte das aber nicht für besonders sinnvoll, das stört einen langfristig mehr als das es nutzt, die Entscheidung sich vorher zu überlegen, ob der eingegebene Befehl unterwünschte Auswirkungen haben kann kann dir niemand abnehmen. Ansonsten könnte man noch die history vor dem Anzeigen des Prompts überschreiben - das halte ich auch für keine besonders elegante Lösung, aber wenn es dir Spaß macht:
|
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 292 |
Dein Script konnte ich noch nicht richtig ausprobieren. Ich bräuchte noch das reloaden der bash_history |
||||
Anmeldungsdatum: Beiträge: 11176 Wohnort: München |
Das ist der letzte Befehl in der Funktion |
||||
Anmeldungsdatum: Beiträge: 17548 Wohnort: Berlin |
Mir ist auch Sinn und Zweck der Aktion nicht klar. Willst Du vermeiden durch 100 oder 1000 Einträge zu blättern und willst Du einen großen Pack, aber nicht alle, zuvor ausgeführter Kommandos auszuführen? Und lustig stelle ich mir vor, wenn nach einiger Zeit aus
wird. Ist es nicht sinnvoller die ganze History in ein Script zu kopieren
, dann das Script von den unliebsamen Kommandos zu löschen, ausführbar zu machen und en bulk durchrattern zu lassen? Alternativ könnte man auch mit einer Schleife jede Zeile zur Konfirmation vorlegen und beim Abnicken ausführen. Generell schützen Backups vor Fehlern der Unachtsamkeit bzw. helfen die so entstandenen Probleme auszubügeln. |