Autore Topic: Bash e Zsh: tips & tricks  (Letto 3088 volte)

Offline andreazube

  • *
  • Post: 1595
  • Reputazione: 64
  • I AM THE INTERSECT
    • Mostra profilo
    • Lupo mannaro
Bash e Zsh: tips & tricks
« il: 15 Dicembre 2012 ore 19:06 »
Scopo: Personalizzare e aggiungere funzioni alla shell Bash e a quella Zsh
Come: Modificando i relativi file di configurazione
Prerequisiti: Shell Bash, editor di testi
Vantaggi: Miglioramenti vari alle impostazioni di default della bash o della zsh
Tempo necessario: 10 minuti


Pagina fatta per raccogliere comandi,opzioni e in generale "trucchi" sulla shell bash.

*Errori di digitazione con cd
Per fare in modo che certi errori di battitura, come "ect" al posto di "etc" e similari, vengano ignorati, apriamo il file /home/nomeutente/.bashrc e aggiungiamo alla fine del file questa riga:
Codice: [Seleziona]
shopt -s cdspellEsempi:
Codice: [Seleziona]
[andreazube@andreazube-pc /]$ cd /medoa/dsti
/media/dati
[andreazube@andreazube-pc dati]$
e
Codice: [Seleziona]
[andreazube@andreazube-pc /]$ cd /mwdoa/dati
bash: cd: /mwdoa/dati: File o directory non esistente
[andreazube@andreazube-pc /]$
-------------------------
Codice: [Seleziona]
[andreazube@andreazube-pc dati]$ cd scaricati
Scaricati
[andreazube@andreazube-pc Scaricati]$
e
Codice: [Seleziona]
[andreazube@andreazube-pc dati]$ mkdir scaricati
[andreazube@andreazube-pc dati]$ cd scaricati
[andreazube@andreazube-pc scaricati]$
Da notare che
1)Corregge anche più errori a percorso, ma solo fino a una lettera sbagliata per nome( "media" e "dati" sono due nomi)
2)Corregge anche le lettere maiuscole-minuscole, ma ovviamente se si sbaglia a scrive scrivendo il nome di un altra cartella l'errore non verrà corretto (non ha mica la telepatia, in fondo)
3)Non cambia percorso "alla cieca" ma da una riga di output per far capire in che cartella si è messo.

NON funziona se usate la zsh

*Andare nell'ultima cartella visitata
Se volete andare in maniera rapida nell’ultima cartella visitata da terminale, apritelo e digitate:
Codice: [Seleziona]
cd -esempio
Codice: [Seleziona]
[andreazube@andreazube-pc ~]$ cd /media/dati
[andreazube@andreazube-pc dati]$ cd -
/home/andreazube
[andreazube@andreazube-pc ~]$

Niente di speciale ma potrebbe essere comodo.

*Scorciatoie da tastiera varie
nota: cursore= ||
           frecce direzionali: <-- e --> (rispettivamente freccia sinistra e destra)

    - ALT + B e ALT + F:
    alternativa: CTRL+Freccia direzionale (nella direzione desiderata)
    Muovono il cursore a inizio e fine della parola corrente
    esempio:
     
Codice: [Seleziona]
chakra linux||     premendo alt+b  o ctrl+<-- diventa
     
Codice: [Seleziona]
chakra ||linux     se ora che abbiamo il cursore all'inizio della parola "Linux" premiamo alt+f o ctrl+-->, torneremo allo stato iniziale:
     
Codice: [Seleziona]
chakra linux||
   - CTRL + A e CTRL + E:
    Muovono il cursore all’inizio e alla fine della riga
 esempio:
     
Codice: [Seleziona]
chakra linux||     premendo ctrl+a diventa
     
Codice: [Seleziona]
||chakra linux     se ora che abbiamo il cursore all'inizio della riga premiamo ctrl+e  torneremo allo stato iniziale:
     
Codice: [Seleziona]
chakra linux||
   -  CTRL + L:
    Pulisce lo schermo
   esempio
 
Codice: [Seleziona]
[andreazube@andreazube-pc ~]$ echo chakra linux
chakra linux
[andreazube@andreazube-pc ~]$ echo chuck bartowski
chuck bartowski
[andreazube@andreazube-pc ~]$
diventa
Codice: [Seleziona]
[andreazube@andreazube-pc ~]$ da notare che
Codice: [Seleziona]
[andreazube@andreazube-pc ~]$ echo chakra linux
chakra linux
[andreazube@andreazube-pc ~]$ echo chuck bartowski
chuck bartowski
[andreazube@andreazube-pc ~]$ echo italia
diventa
Codice: [Seleziona]
[andreazube@andreazube-pc ~]$ echo italiaQuesta combinazione ha lo stesso effetto del comando clear (però si fa più in fretta e non si deve cancellare il comando che si sta scrivendo)

    - CTRL + U:
    Cancella tutti i caratteri a sinistra del cursore
    esempio
   
Codice: [Seleziona]
chakra ||linux    diventa
     
Codice: [Seleziona]
linux
    CTRL + K:
    Cancella tutti i caratteri a destra del cursore.
esempio
   
Codice: [Seleziona]
chakra ||linux    diventa
     
Codice: [Seleziona]
chakra
    -CTRL + C
      termina il processo in corso di esecuzione
esempio:
Codice: [Seleziona]
[andreazube@andreazube-pc dati]$ sudo pacman -Syu
[sudo] password for andreazube:
:: Sincronizzazione dei database in corso...
 core è aggiornato
 extra è aggiornato
^Community                                  0,0   B  0,00B/s 00:00 [-------------------------------------]   0%
Interrupt signal received

[andreazube@andreazube-pc dati]$
(naturalmente ho premuto ctrl+c all'inizio della 6° riga, riconoscibile dal segno ^)

 
  -CTRL + Z
    mette in pausa il processo in corso di esecuzione
esempio
Codice: [Seleziona]
[andreazube@andreazube-pc dati]$ sudo pacman -Syu
:: Sincronizzazione dei database in corso...
 core è aggiornato
 extra è aggiornato
^Zommunity                                  0,0   B  0,00B/s 00:00 [-------------------------------------]   0%
[1]+  Stopped                 sudo pacman -Syu
[andreazube@andreazube-pc dati]$
Se ctrl+c termina il comando e basta, ctrl+z lo mette in pausa: il  comando potrà essere ripreso successivamente
Codice: [Seleziona]
[andreazube@andreazube-pc dati]$ sudo pacman -Syu
:: Sincronizzazione dei database in corso...
 core è aggiornato
 extra è aggiornato
^Zommunity                                121,4 KiB   943K/s 00:1 [##-----------------------------------]   6%
[1]+  Stopped                 sudo pacman -Syu
[andreazube@andreazube-pc dati]$ echo ciao
ciao
[andreazube@andreazube-pc dati]$ jobs
[1]+  Stopped                 sudo pacman -Syu
[andreazube@andreazube-pc dati]$ fg %1
sudo pacman -Syu
^Community                                252,9 KiB   952K/s 00:01 [####---------------------------------]  13%
Interrupt signal received

[andreazube@andreazube-pc dati]$
Per sapere come riprendere un comando più in dettaglio cercare una guida su bash e vedere la voce "jobs"
Per ora basti sapere che il comando "jobs" mostra i job (lett. lavori) presenti, e "fg %x" dove x è il numero del job permette di riprendere un comando (in primo piano ndt.) sospeso
- Alt+Backspace
 si cancella la parola a sinistra del cursore fino al primo spazio o segno di punteggiatura ( . / , _ ecc.) ,segno di punteggiatura non compreso

Codice: [Seleziona]
[21:20:22][gt--> ~]$ cd documenti/0.Persone| | diventa
Codice: [Seleziona]
[21:20:22][gt--> ~]$ cd documenti/0.| |
Queste sono solo alcune delle combinazioni.Un elenco più completo qui (prendo questo link perchè qui è organizzato bene, ma ci sono pagine più ricche di scorciatoie)


*Ricerca nella cronologia della shell
La shell ha una cronologia che ci permette di richiamare comandi passati in precedenza usando le frecce su e giù. È possibile anche fare una ricerca in questa cronologia.

La bash ha un sistema di ricerca incrementale, per attivarlo è sufficiente premere CTRL + R e iniziare a digitare il comando, sarà poi la shell a mostrarvi il comando completo se trovato.
esempio
Codice: [Seleziona]
[andreazube@andreazube-pc ~]$ echo ciao
ciao
[andreazube@andreazube-pc ~]$ cd /media/dati
ora premendo ctrl+r
Codice: [Seleziona]
(reverse-i-search)`ec': echo ciaoovviamente si possono fare ricerche di comandi eseguiti molto tempo addietro.
Però almeno per mia esperienza si limita a trovare un comando.Se ad esempio avete usato più volte "pacman" poi avete usato varie volte altri comandi ,facendo la ricerca troverete solo l'ultimo comando con pacman.

Per trovare tutti i comandi, invece, date il comando
history | grep stringa_da_cercare

esempio
Codice: [Seleziona]
[andreazube@andreazube-pc ~]$ history  | grep echo
  264  echo chakra linux
  265  echo chuck bartowski
  266  echo chuck bartowski
  267  echo chakra linux
  268  echo ciao
  271  echo ciao
  341  echo $BASH_VERSINFO
  364  echo ciao
  522  history  | grep echo
[andreazube@andreazube-pc ~]$

*Inserire l'ultimo comando dato all'interno di un'altro comando
con !! si rimette nella riga l'ultimo comando dato (utile per chi come me non si ricorda mai cosa dare con sudo e cosa no)
esempio
Codice: [Seleziona]
[21:22:24][gt--> ~]$ pacman -S systemd
errore: questa operazione è possibile solo da root.
[21:22:49][gt--> ~]$ sudo !!
sudo pacman -S systemd
Password:
attenzione: systemd-196-2 è aggiornato, sarà reinstallato
risoluzione delle dipendenze in corso...
ricerca dei conflitti in corso...

Pacchetti (1): systemd-196-2

Dimensione totale dei pacchetti da installare:   11,89 MiB

Dimensione dell'aggiornamento di rete: 0,00 MiB

Vuoi procedere con l'installazione? [S/n]

L'angolo della zsh

Configurazione che aggiusta il binding per i tasti canc, Ctrl-Left, Ctrl-Right, Home e Fine.
Copiare questo in /home/nomeutente/.zshrc
Codice: [Seleziona]
# Lines configured by zsh-newuser-install
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
bindkey -e

# End of lines configured by zsh-newuser-install
# The following lines were added by compinstall
zstyle :compinstall filename '/home/dino/.zshrc'

autoload -Uz compinit
compinit
# End of lines added by compinstall

bindkey "^[[H" beginning-of-line
bindkey "^[[F" end-of-line
bindkey '\e[3~' delete-char
bindkey '^[[1;5C' emacs-forward-word
bindkey '^[[1;5D' emacs-backward-word

alias ls='ls --group-directories-first --time-style=+"%d.%m.%Y %H:%M" --color=auto -F'
alias ll='ls -l --group-directories-first --time-style=+"%d.%m.%Y %H:%M" --color=auto -F'
alias la='ls -la --group-directories-first --time-style=+"%d.%m.%Y %H:%M" --color=auto -F'
alias grep='grep --color=tty -d skip'
alias cp="cp -i"                          # confirm before overwriting something
alias df='df -h'                          # human-readable sizes
alias free='free -m'                      # show sizes in MB

export EDITOR=nano


Questi sono pochi "trucchi", ma sono tutti testati e funzionanti.
Se qualcuno ha suggerimenti, si faccia avanti senza paura  :)

Guida creata in origine da andreazube ma poi ampliata con l'aiuto di(quasi) tutti

Guida aggiornata a Febbraio 2013
« Ultima modifica: 24 Febbraio 2013 ore 11:00 da andreazube »

Offline whoami

  • *
  • Post: 1562
  • Reputazione: 64
  • Quando c'era init i log arrivavano in orario!
    • Mostra profilo
Re:Bash: tips & tricks [incompleta]
« Risposta #1 il: 15 Dicembre 2012 ore 21:25 »
+1 per l'ottima idea e per i trucchi che hai messo!

Ne aggiungo solo un paio:

* con Alt+Backspace (si chiama così il tasto per cancellare sopra l'Invio, vero?) si cancella la parola a sinistra del cursore fino al primo spazio o segno di punteggiatura ( . / , _ ecc) segno di punteggiatura non compreso

Codice: [Seleziona]
[21:20:22][gt--> ~]$ cd documenti/0.Persone| | diventa
Codice: [Seleziona]
[21:20:22][gt--> ~]$ cd documenti/| |
* con !! si rimette nella riga l'ultimo comando dato (utile per chi come me non si ricorda mai cosa dare con sudo e cosa no)

Codice: [Seleziona]
[21:22:24][gt--> ~]$ pacman -S systemd
errore: questa operazione è possibile solo da root.
[21:22:49][gt--> ~]$ sudo !!
sudo pacman -S systemd
Password:
attenzione: systemd-196-2 è aggiornato, sarà reinstallato
risoluzione delle dipendenze in corso...
ricerca dei conflitti in corso...

Pacchetti (1): systemd-196-2

Dimensione totale dei pacchetti da installare:   11,89 MiB

Dimensione dell'aggiornamento di rete: 0,00 MiB

Vuoi procedere con l'installazione? [S/n]


echo "VQF AHELME I BI CI WECPF"| tr "ETAOINSHRDLUBCFGJMQPVWZYXK" "A-Z"

Offline andreazube

  • *
  • Post: 1595
  • Reputazione: 64
  • I AM THE INTERSECT
    • Mostra profilo
    • Lupo mannaro
Re:Bash: tips & tricks [incompleta]
« Risposta #2 il: 15 Dicembre 2012 ore 21:35 »
@whoami
grazie mille per queste due chicche, in particolare per la seconda

Però l'esempio della prima è errato:
se
Citazione
si cancella la parola a sinistra del cursore fino al primo spazio o segno di punteggiatura
allora
Codice: [Seleziona]
[21:20:22][gt--> ~]$ cd documenti/0.Persone| |diventa
Codice: [Seleziona]
[21:20:22][gt--> ~]$ cd documenti/0.non
Codice: [Seleziona]
[21:20:22][gt--> ~]$ cd documenti/| |Infatti verificando su konsole il tuo esempio risulta errato.
Ripeto , grazie mille per i 2 suggerimenti, ora gli metto nella guida

Offline Hombremaledicto

  • *
  • Post: 520
  • Reputazione: 40
  • Ma chi ti si incula
    • Mostra profilo
    • Hombre on DA
Re:Bash: tips & tricks [incompleta]
« Risposta #3 il: 16 Dicembre 2012 ore 02:29 »
@andrazube: maledizione, ti sei meritato un'altro +1 :)
Keep it rolling, baby...

Offline whoami

  • *
  • Post: 1562
  • Reputazione: 64
  • Quando c'era init i log arrivavano in orario!
    • Mostra profilo
Re:Bash: tips & tricks [incompleta]
« Risposta #4 il: 16 Dicembre 2012 ore 07:27 »
@whoami
grazie mille per queste due chicche, in particolare per la seconda

Però l'esempio della prima è errato:
se allora
Codice: [Seleziona]
[21:20:22][gt--> ~]$ cd documenti/0.Persone| |diventa
Codice: [Seleziona]
[21:20:22][gt--> ~]$ cd documenti/0.non
Codice: [Seleziona]
[21:20:22][gt--> ~]$ cd documenti/| |Infatti verificando su konsole il tuo esempio risulta errato.
Ripeto , grazie mille per i 2 suggerimenti, ora gli metto nella guida

hai ragione, mea culpa ;D
echo "VQF AHELME I BI CI WECPF"| tr "ETAOINSHRDLUBCFGJMQPVWZYXK" "A-Z"

Offline Hombremaledicto

  • *
  • Post: 520
  • Reputazione: 40
  • Ma chi ti si incula
    • Mostra profilo
    • Hombre on DA
Re:Bash: tips & tricks [incompleta]
« Risposta #5 il: 16 Dicembre 2012 ore 13:53 »
Ok, ci tenevo ad aggiungere (può tornare utile) la combinazione ctrl + c, per terminare l'operazione in corso.
Keep it rolling, baby...

Offline andreazube

  • *
  • Post: 1595
  • Reputazione: 64
  • I AM THE INTERSECT
    • Mostra profilo
    • Lupo mannaro
Re:Bash: tips & tricks [incompleta]
« Risposta #6 il: 16 Dicembre 2012 ore 13:55 »
Ok, ci tenevo ad aggiungere (può tornare utile) la combinazione ctrl + c, per terminare l'operazione in corso.
Si, c'è anche ctrl+z per esempio
Sono entrambe nel link messo, ma a sto punto metto tutto dentro nella guida

Offline Hombremaledicto

  • *
  • Post: 520
  • Reputazione: 40
  • Ma chi ti si incula
    • Mostra profilo
    • Hombre on DA
Re:Bash: tips & tricks [incompleta]
« Risposta #7 il: 16 Dicembre 2012 ore 14:07 »
Tutto fa brodo  :)
Keep it rolling, baby...

Offline danyf90

  • *
  • Post: 827
  • Reputazione: 42
  • Chakra
    • Mostra profilo
Re:Bash: tips & tricks [incompleta]
« Risposta #8 il: 20 Dicembre 2012 ore 10:24 »
grazie guida molto utile ;D +1! i comandi alt+b alt+f e simili si possono fare anche in maniera molto più intuitiva con ctrl+freccia nella direzione desiderata ;D

per cercare un comando vecchio si può utilizzare alternativamente a ctrl+R (che come hai detto mostra solo l'ultima occorrenza):

Codice: [Seleziona]
history | grep stringa_da_cercare

TheImmortalPhoenix

Re:Bash: tips & tricks [incompleta]
« Risposta #9 il: 20 Dicembre 2012 ore 13:43 »
Codice: [Seleziona]
command not found:shopt
Quale pacchetto devo installare?

Offline andreazube

  • *
  • Post: 1595
  • Reputazione: 64
  • I AM THE INTERSECT
    • Mostra profilo
    • Lupo mannaro
Re:Bash: tips & tricks [incompleta]
« Risposta #10 il: 20 Dicembre 2012 ore 16:09 »
Codice: [Seleziona]
command not found:shopt
Quale pacchetto devo installare?
Che io sappia, nessun pacchetto oltre a bash  ???

Non è che lo hai messo sotto gli alias?

Se dai "shopt" da terminale, che ti esce?

TheImmortalPhoenix

Re:Bash: tips & tricks [incompleta]
« Risposta #11 il: 20 Dicembre 2012 ore 16:46 »
Nessun alias, ho lanciato il comando così come l'hai scritto...sarà perchè uso zsh?

Offline andreazube

  • *
  • Post: 1595
  • Reputazione: 64
  • I AM THE INTERSECT
    • Mostra profilo
    • Lupo mannaro
Re:Bash: tips & tricks [incompleta]
« Risposta #12 il: 20 Dicembre 2012 ore 17:24 »
Nessun alias, ho lanciato il comando così come l'hai scritto...sarà perchè uso zsh?
Possibile, anzi, probabile, visto che sono "trucchi" per la bash
Se vai momentaneamente in bash (se non sbaglio basta lanciare "bash"), ti funge?

TheImmortalPhoenix

Re:Bash: tips & tricks [incompleta]
« Risposta #13 il: 20 Dicembre 2012 ore 18:56 »
Si, era quello il problema....vabbè passo, bash non mi piace  :P

Offline dinolib

  • *
  • Post: 3226
  • Reputazione: 110
    • Mostra profilo
Re:Bash: tips & tricks [incompleta]
« Risposta #14 il: 24 Dicembre 2012 ore 14:20 »
Sono un pelo OT, ma sempre di shell si parla, quindi...  ;D

Mi sono messo a sistemare la configurazione di zsh (a proposito, il completamento su bash funziona un po' meglio?).

Posto la mia configurazione di $HOME/.zshrc che aggiusta il binding per i tasti canc, Ctrl-Left, Ctrl-Right, Home e Fine.
Spero sia utile...

Codice: [Seleziona]
# Lines configured by zsh-newuser-install
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
bindkey -e

# End of lines configured by zsh-newuser-install
# The following lines were added by compinstall
zstyle :compinstall filename '/home/dino/.zshrc'

autoload -Uz compinit
compinit
# End of lines added by compinstall

bindkey "^[[H" beginning-of-line
bindkey "^[[F" end-of-line
bindkey '\e[3~' delete-char
bindkey '^[[1;5C' emacs-forward-word
bindkey '^[[1;5D' emacs-backward-word

alias ls='ls --group-directories-first --time-style=+"%d.%m.%Y %H:%M" --color=auto -F'
alias ll='ls -l --group-directories-first --time-style=+"%d.%m.%Y %H:%M" --color=auto -F'
alias la='ls -la --group-directories-first --time-style=+"%d.%m.%Y %H:%M" --color=auto -F'
alias grep='grep --color=tty -d skip'
alias cp="cp -i"                          # confirm before overwriting something
alias df='df -h'                          # human-readable sizes
alias free='free -m'                      # show sizes in MB

export EDITOR=nano

Al momento non mi vengono in mente altre scomodità da sistemare, nel caso fate sapere che vediamo se si può fare meglio!

 

Template by Homey | Sito ufficiale | Disclaimer