History i terminal

Alle tekniske spørgsmål som ikke hører ind under de andre fora.
Blfriis
Indlæg: 445
Tilmeldt: 3. nov 2009, 10:50
IRC nickname: blfriis
Geografisk sted: Randers

History i terminal

Indlæg af Blfriis »

Hejnår jeg taster history i terminalen kommer alle kommandoerne frem som de skal, og history | less virker også fint.Jeg kunne godt tænke mig en history som kun viser de indtastede kommandoer en gang. Altså f.eks
sudo apt-get update
kun stod listet 1 gang.. er det muligt???
Ubuntu 15.04 Unity og ZorinOS 9 Ultimate http://zorin-os.dk/index.php
Brugeravatar
NickyThomassen
Admin
Indlæg: 3652
Tilmeldt: 5. mar 2010, 19:58
IRC nickname: nicky
Geografisk sted: 192.168.20.42

Re: History i terminal

Indlæg af NickyThomassen »

Jeg så en sjov en den anden dag "UNIX, where there is a shell, there is a way".

Har du ikke også linienumre foran hver kommando?
I så fald skal de væk inden der kan gøres mere, for ellers er hver linie i princippet unik.

Efter en hurtig søgning fandt jeg en generel sed-kommando, som sletter X antal tegn i starten af hver linie

Kode: Vælg alt

sed 's/^.\{X\}//g'


Her skulle X være 7, og når jeg kører den, så står hver kommando ved liniestart

Kode: Vælg alt

history | sed 's/^.\{7\}//g'


Det næste er så selvfølgelig spørgsmålet, og det giver at andet problem: Bruger man 'sort' og uniq' til opgaven, så bliver resultatet ikke vist i den rækkefølge, som kommandoerne oprindeligt blev kørt. Så efter endnu en søgning fandt jeg en awk-kommando

Kode: Vælg alt

awk ' !x[$0]++'


Den gør det samme som 'sort' og uniq', men bevarer rækkefølgen. Så den samlede kommando bliver

Kode: Vælg alt

history | sed 's/^.\{7\}//g' | awk ' !x[$0]++'


http://duckduckgo.com/?q=sed+remove+numbers :
http://codept.blogspot.dk/2007/12/sed-remove-first-4-letters-in-each-line.html
og
(jeg kan ikke lige huske hvad jeg søgte efter her)
http://unstableme.blogspot.dk/2008/03/remove-duplicates-without-sorting-file.html

Linien kan gemmes i en fil under /usr/local/bin med +x, så filen kan afvikles som et script. På den måde kan du bare skrive filens navn, så udføres kommandoen. Bare husk '#!/bin/bash' på første linie hvis du gør det.
Blfriis
Indlæg: 445
Tilmeldt: 3. nov 2009, 10:50
IRC nickname: blfriis
Geografisk sted: Randers

Re: History i terminal

Indlæg af Blfriis »

Hej igen jo jeg har nr foran.. men jeg tror det bliver mere omstændigt, end jeg lige kan finde ud af :D ... Havde bare håbet på at der var en kommando jeg ikke kendte. ;)
Ubuntu 15.04 Unity og ZorinOS 9 Ultimate http://zorin-os.dk/index.php
Brugeravatar
NickyThomassen
Admin
Indlæg: 3652
Tilmeldt: 5. mar 2010, 19:58
IRC nickname: nicky
Geografisk sted: 192.168.20.42

Re: History i terminal

Indlæg af NickyThomassen »

Nej, jeg tror desværre at den eneste løsning, er at lege lidt med den liste som 'history' kommer med :)

På den anden side, så er løsningen ret universel for at behandle nogle data i Linux, så tekstdokumenter og den slags kan også behandles på denne her måde.

Men der burde ikke være mere med den kommando, end at kopiere den ind i en terminal, og så trykke enter. Det sidste jeg skrev med at gemme kommandoen som et script, var bare en bemærkning. Jeg har selv et tekstdokument på over 50 linier med eksempler på kode og kommandoer, som kan være nyttige, men som er svære til umulige at huske. Og det dækker netop sådanne nogle kommandoer her.
Blfriis
Indlæg: 445
Tilmeldt: 3. nov 2009, 10:50
IRC nickname: blfriis
Geografisk sted: Randers

Re: History i terminal

Indlæg af Blfriis »

Hej igen. Nå nu faldt 10øren :) .

Kode: Vælg alt

history | sed 's/^.\{7\}//g' | awk ' !x[$0]++'
Ser ud til at klare opgaven, så mange tak for hjælpen, så er det noget nemmere at overskue..
Ubuntu 15.04 Unity og ZorinOS 9 Ultimate http://zorin-os.dk/index.php
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

uhistory

Indlæg af lath »

Blfriis skrev:Hej igen. Nå nu faldt 10øren :) .

Kode: Vælg alt

history | sed 's/^.\{7\}//g' | awk ' !x[$0]++'
Ser ud til at klare opgaven, så mange tak for hjælpen, så er det noget nemmere at overskue..


Jeg kunne (vil!) for sjov skyld godt lige lave et lille program i D (kig på http://dlang.org/ ) der hedder uhistory der kan:
  • levere en liste af unikke tekststykker i listen fra $HOME/.bash_history (kommandoer)
  • men stadig beholder tallet til venstre (nyttig viden i bash til brug i andre kommandoer). Det er super simpelt for jeg har lige opdaget tallet er linienummeret i .bash_history (tæller fra 1 og opefter fra den første linie hvori der er tekst)

Jeg leverer programmet til download i kildekode, og som binært program i 32-bit og 64-bit til Linux (hvis man vil kan man også oversætte til MAC OS X fra kildekoden)

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
Blfriis
Indlæg: 445
Tilmeldt: 3. nov 2009, 10:50
IRC nickname: blfriis
Geografisk sted: Randers

Re: History i terminal

Indlæg af Blfriis »

Det lyder spændende, dog kan jeg ikke få linket til at virke :?
Ubuntu 15.04 Unity og ZorinOS 9 Ultimate http://zorin-os.dk/index.php
lath
Indlæg: 5095
Tilmeldt: 27. apr 2008, 02:16
IRC nickname: lars_t_h
Geografisk sted: Fyn

Re: History i terminal

Indlæg af lath »

Blfriis skrev:Det lyder spændende, dog kan jeg ikke få linket til at virke :?

Det virker nu fint, du har nok været forbi på det forkerte tidspunkt på døgnet hvor websitet blev opdateret.

Generelt er det en god ide at være lidt obs på tidsforskelle - det er altid nat et eller andet sted på jorden, og det er om natten at servere normalt blev opdateret.

/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
Blfriis
Indlæg: 445
Tilmeldt: 3. nov 2009, 10:50
IRC nickname: blfriis
Geografisk sted: Randers

Re: History i terminal

Indlæg af Blfriis »

Ja nu ser det ud til at virke, så du har nok ret i at det var et galt tidspunkt :)
Ubuntu 15.04 Unity og ZorinOS 9 Ultimate http://zorin-os.dk/index.php