Ripetizioni con la bash…

No, non vi sto consigliando di prendere lezioni private per l’uso della bash :D

alt.png

Invece mi riallaccio al mio vecchio post “Shell: alcune interessanti combinazioni di tasti” e vi presento un’altra combinazione di tasti di cui non riesco proprio a fare a meno


La combinazione di tasti “Alt .” (sì, quello è un punto) serve a ripetere parti dei comandi precedenti, che la bash ha in memoria. Premere più volte la combinazione ci porta indietro tra i comandi, in base allo storico della shell.

Esempio

Avete presente la classica situazione in cui abbiamo a che fare ripetutamente con nomi di file molto lunghi e magari localizzati in percorsi assurdi? Faccio un esempio, ho questi file e percorsi:

1 /media/hda5/tmp/modello_fattura2/
2 /Doc/fgenerator/examples/fattura_evasore_fiscale.pdf
3 /media/hda3/watch_out_where_the_huskies_go/
4 /home/felipe/dont_you_eat_the_yellow_snow.txt

Immaginiamo di dover spostare 4 in 3, successivamente 3 in 1, e infine 2 in 1.¹ Ecco come questa combinazione di tasti ci semplificherebbe la vita:

$: mv  /home/felipe/dont_you_eat_the_yellow_snow.txt /media/hda3/watch_out_where_the_huskies_go/
$: mv ALT . /media/hda5/tmp/modello_fattura2/
$: mv /Doc/fgenerator/examples/evasore_fiscale.pdf ALT .

Abbiamo risparmiato circa il 30% del lavoro, senza bisogno di ripetere percorsi o nomi di file che avevamo già immesso. Sembra un processo macchinoso, ma credetemi: appena cominciate ad usarlo sembrerà totalmente naturale e vi prometto che non dovrete far altro che premere “Alt .”, al massimo due/tre volte se non vi pesca subito quello che vorreste.

Immaginate di approfittare di questo trucco nell’uso quotidiano della bash, quando capita di dover riscrivere diecimila volte le stesse cose ;)

[¹] Lo so che è un esempio totalmente stupido :D

21 pensieri su “Ripetizioni con la bash…

  1. Fate bene attenzione a dove vanno gli husky e trattenetevi dal mangiare la neve gialla.
    Parole sante !

  2. Felipe dice:
    “serve a ripetere parti dei comandi precedenti”

    Intendevi dire:
    “serve a ripetere l’ultima parte di comandi precedenti”

    giusto?
    Io ho dovuto provare concretamente per capire cosa diavolo facesse l’ALT .… :)

  3. Visto che non lo visto questa combinazione ne in questo ne nell’altro posto la riporto.

    CTRL Z
    bg %n / fg %n

    la prima combinazione era stata mostrata e manda a nanna un processo, il processo e’ stoppato e non va avanti. Se volete mandarlo a nanna e farlo girarare allora bisogna dare “bg %n” dove %n e’ il numero del processo che esce con CTRL Z.

    fg %n e’ gia’ stato spiegato lo riporto solo per completezza.

    Non so proprio delle semplici combinazioni di tasti ma anche dei comandi, credo comunque possan essere utili ed in tema con il post.

  4. FELIPE!!!
    Lo sognavo la notte questo comando!
    Lo desideravo da tempo….e pure la mia povera tastiera :D

    Ma per caso c’è una combinazione per tornare indietro
    se per esempio ehm preso dalla foga una arriva al comando che
    gli interessa e lo ehm oltrepassa?

  5. Io uso tantissimio CTRL R e CTRL S.
    Scrivi un paio di lettere di una vecchia riga di comando che ti ricordi e poi premi ctrl r (eventualmente ripetuto) per cercare (r = indietro, s=avanti) nella history le righe di comando che contengono quelle lettere.
    E come un tab (autocompletamento) che lavora sulla history anziche’ sul path.
    In questo modo non devo premere 4000 volte la pressione del tasto FRECCIA SU per cercare una riga vecchia.

    CIAO

  6. Ok, è una delle combinazioni di tasti più utili in assoluto, ma hai dimenticato un’altra combinazione che a questa si lega: “Alt -” (si, quello è un meno ^_^)

    quotando la descrizione del comando dato da hronir, “serve a selezionare (a ritroso) la parte da ripetere di comandi precedenti”

    con un’esempio si dovrebbe capire meglio: mettiamo di aver dato
    cp pippo.txt pluto.txt directory/
    e di voler spostare pluto.txt in altra_directory… basta usare
    mv Alt – Alt . altra_directory/
    se avessimo invece voluto spostare pippo.txt sempre in altra_directory, bastava
    mv Alt – 2 Alt . altra_directory/
    dove con “2” si indica la posizione da ripetere: la “-2” (nell’esempio, cp sarebbe stato la “-3”)

    Infine, con Alt . è possibile andare a ritroso selezionando parti dei comandi precedenti: basta ripetere la combinazione più volte (o anche premere più volte il “punto” mantenendo premuto l’ “alt”): tornando all’esempio, nel caso fossero stati eseguiti nell’ordine
    cp pippo.txt pluto.txt directory/
    mv Alt – Alt . altra_directory/
    e volessimo spostare pippo.txt sempre in altra_directory, basta
    mv Alt – 2 Alt .. Alt .

  7. Ciao Felipe, volevo sapere se potevi consigliarmi dei comandi per fare queste cose:
    1. Io ho una cartella con dei file, quelli più grandi di 1 mega li voglio lasciare fermi e quelli più piccoli di un mega li voglio spostare tutti in una cartella.
    2. Questi file hanno tutti il nome che inizia per una stringa di caratteri uguale. Io vorrei toglierla senza rinominarli uno alla volta. Si può fare?

  8. 1) probabilmente find e poi | xargs

    2) non mi ricordo come si fa’ in bash (dovrebbe essere # per i prefissi e % per i suffissi), qualcosa tipo:
    for a in *; do echo mv $a ${a#prefisso}; done
    prendilo con le pinze perche’ nummericordo, non dovrebbe fare danni dato che c’e’ un “echo” prima del “mv”, comunque fai attenzione.

    Con zsh e’ più facìle:
    mv $a{a:s/foo/bar}
    mi raccomando, non installate zsh, ha un manuale leggermente un po’ piu’ piccolo di Emacs,
    ls **/* rulez, come Alt-q, Atl-u e Alt-x

  9. 1) dalla directory in cui hai i file (nel caso contrario devi specificare il percorso)
    find * -maxdepth 0 -size -1m -exec /bin/mv {} path\/destinazione\/ \;
    prendila comunque con le molle e per sicurezza prima fagli fare un’echo del comando ( -exec /bin/echo /bin/mv {} path\/destinazione\/ \; )

  10. Chiaramente sopra dovevo scrivere:
    mv $a ${a:s/foo/bar}
    se anche adesso sparisce lo spazio e il dollaro davanti alla prima graffa, e’ colpa di wordpress… (=

  11. forse è un po’ tardino ma a qualcuno può essere utile:

    la combinazione !command ripete l’ultima chiamata di command comprensiva di flag parametri e tutto il resto..

    è molto utile quando avete digitato una stringa di comandi e parametri molto lunga un bel po’ di tempo addietro, e non volete scorrere la lista ma per l’appunto vi ricordate il comando..

    ad esempio:
    rsync –verbose –progress –stats –compress –rsh=/usr/local/bin/ssh
    –recursive –times –perms –links –delete \
    –exclude “*bak” –exclude “*~” \
    /www/* webserver:simple_path_name

    […]
    !rsync

    ciao :)
    asy

  12. > Ma per caso c’è una combinazione per tornare indietro
    > se per esempio ehm preso dalla foga una arriva al comando che
    > li interessa e lo ehm oltrepassa?

    Con zsh, usando l’undo, Ctrl-_ o Ctrl-/ oppure cerca il keybind se qualcuno ha modificato la configurazione, qualcosa tipo Alt-x where-is Enter undo Enter. Se usi ancora bash devi guardare nel fine manuale…

  13. Having made use of a press release submission to promote many of my websites I always ensure I utilize the well-established news wires to submit my
    press release. I had used the free press release distribution
    internet sites but you definitely do get what you pay for.
    A press release is too strong a marketing tactic
    to cut corners on. A paid for distribution service like PR Buzz,
    Email Wire, SBWire etcetera don’t just bring about your brand extraordinary exposure but
    additionally powerful back links and targeted traffic.

    That is why I continually utilize a press release from the moment my
    blog goes online and let it work its magic!

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...