Bash tips: differenze tra le versioni

in espansione!
mNessun oggetto della modifica
(in espansione!)
Riga 1: Riga 1:
{{Stub}}
{{Versioni compatibili}}
{{Versioni compatibili}}


Riga 94: Riga 95:
Sotto questo astruso nome si cela la possibilità di ricercare nello storico dei comandi semplicemente premendo <code>CRTL+r</code> e digitando qualche carattere del comando cercato. Verrà immediatamente mostrato l'ultimo comando che soddisfa i criteri di ricerca. Se più comandi soddisfano la ricerca è possibile scorrerli (dall'ultimo al primo) premendo nuovamente <code>CTRL+r</code>.
Sotto questo astruso nome si cela la possibilità di ricercare nello storico dei comandi semplicemente premendo <code>CRTL+r</code> e digitando qualche carattere del comando cercato. Verrà immediatamente mostrato l'ultimo comando che soddisfa i criteri di ricerca. Se più comandi soddisfano la ricerca è possibile scorrerli (dall'ultimo al primo) premendo nuovamente <code>CTRL+r</code>.


Una volta trovato il comando lo si può eseguire con <code>INVIO</code> oppure editare con <code>CTRL+j</code>.
====Ricerca incrementale====
Quando si cerca con <code>CRTL+r</code> può succedere di superare il comando che ci interessa, a questo punto tocca interrompere con <code>CRTL+g</code> e ricominciare; con una piccola modifica è però possibile abilitare la ricerca nell'altro verso e quindi tornare avanti al comando appena superato, questo disabilitando il flow control. <br>
Il flow control è la funzione di interrompere il flusso del terminale, ovvero l'output e l'input (<code>CRTL+s</code> / <code>CRTL+q</code>), oggigiorno è una funzione poco utile soprattutto in un terminale grafico che ha la funzione di scroll. Aggiungiamo quindi <code>'''stty -ixon'''</code> al file <code>~/.bashrc</code> e d'ora in poi avremo <code>CRTL+s</code> che risponderà alle nostre ricerche.
 
Una volta trovato il comando lo si può eseguire con <code>INVIO</code> oppure modificare con <code>CTRL+j</code>.


====Ricerca nella cronologia====
====Ricerca nella cronologia====
Riga 227: Riga 232:
   echo ${VAR/st/ST}  # --> queSTa.sarebbe.una.stringa.di.esempio
   echo ${VAR/st/ST}  # --> queSTa.sarebbe.una.stringa.di.esempio
   echo ${VAR//st/ST}  # --> queSTa.sarebbe.una.STringa.di.esempio</pre>
   echo ${VAR//st/ST}  # --> queSTa.sarebbe.una.STringa.di.esempio</pre>
===Concatenazione e redirezione===
; <code>&&</code> : operatore logico AND, il secondo comando verrà eseguito solo se il primo avrà esito positivo
; <code>;</code> : separatore di comandi, il secondo comando verrà eseguito in ogni caso
<pre>
$ cd ... && echo done
$ cd ... ; echo done
</pre>
Nel caso specifico di un'applicazione che resta in esecuzione il secondo comando non verrà eseguito finché il
primo non sarà terminato, in questo caso si usa <code>'''&'''</code> e saranno eseguiti entrambi in quanto il primo comando viene mandato in background; prendiamo xterm come esempio:
<pre>
$ xterm && xterm -rv
$ xterm ; xterm -rv
$ xterm & xterm -rv
</pre>
; <code>|</code> : pipe, passa l'output del comando che la precede come input del comando che la segue
<pre>
$ ls -A1 | less
</pre>
; <code>||</code> : operatore logico OR, restituisce esito positivo se almeno una delle condizioni di verifica valutate è vera
<pre>
$ if [ -f ~/.bashrc ] || [ -d ~/.config ]; then echo 'w00t!'; else echo 'no such file or directory'; fi
$ if [ -f ~/.bashrc ] || [ -d ~/.configs ]; then echo 'w00t!'; else echo 'no such file or directory'; fi
$ if [ -f ~/.bash ] || [ -d ~/.configs ]; then echo 'w00t!'; else echo 'no such file or directory'; fi
</pre>
* [http://www.tldp.org/LDP/abs/html/special-chars.html Advanced Bash-Scripting Guide: Special Characters]
Dirige output di comando su file: <pre> $ man xterm > xterm.txt </pre>
Dirige output di errore su file: <pre> $ xterm 2> xterm-errors.log </pre>
Entrambi su file diversi: <pre> $ xterm > xterm_out.log 2> xterm_err.log </pre>
Entrambi sullo stesso file: <pre> $ xterm &> xterm.log </pre>
Entrambi sullo stesso file, alternativa:<pre>$ xterm > xterm.log 2>&1
$ xterm > /dev/null 2>&1 </pre>
Aggiunge nuovo testo ad un file: <pre> $ man uxterm >> xterm.txt </pre>
Cancella contenuto di un file: <pre> $ :> xterm.txt </pre>


===Alternativa a basename===
===Alternativa a basename===
Riga 243: Riga 296:


<pre>for f in *.txt; do mv "$f" "${f/%txt/log}"; done</pre>
<pre>for f in *.txt; do mv "$f" "${f/%txt/log}"; done</pre>
==Miscellanea==
Abbiamo il nostro bel comando al prompt, è lungo tre righe e vogliamo salvarlo perché ci piace o perché è effettivamente troppo lungo e starebbe meglio come alias, che si fa?
# seleziona, apri file, incolla, salva: noioso
# quota il tutto e appendi ad un file con echo: già meglio
# <code>ctrl-x</code> <code>ctrl-e</code>, si apre il nostro editor di fiducia e salviamo: superbo


==Link==
==Link==
271

contributi