ago 082012
 

Oggi voglio condividere con voi alcune delle mie funzioni preferite di bash, le ho chiamate nascoste perché ho scoperto che molte persone non le conoscono o non le usano, ma ad essere onesti non sono così nascoste dopo tutto, si trovano infatti nella pagina man di bash .. ma quanti di noi l’hanno letta tutta?

1) xkcdcom-149-2

Grazie a xkcd.com per la spiegazione.
In breve questo è utile quando è necessario l’accesso come root per un comando e si dimentica di usare sudo .
Il parametro “!!” viene sostituito con l’ultimo comando dato.




2) Usare con gli script bash:

bash -n bashscript.sh – Per controllare la sintassi senza eseguire davvero lo script
bash -x bashscript.sh – Esegue lo script in modalità debug, stampando a video il risultato di ogni comando.

3) Sostituire una stringa nel comando precedente.

E’ possibile usare la sintassi ^vecchiastringa^nuovastringa^ come ad esempio:

$ sudo apt-get install wrongpackagename
$ ^wrongpackagename^rightpackagename^
sudo apt-get install rightpackagename

O in alternativa per ottenere lo stesso risultato si può usare anche:

$ sudo apt-get install wrongpackagename
$ !!:s/wrongpackagename/rightpackagename
sudo apt-get install rightpackagename

Questa sintassi dovrebbe essere familiare, se utilizzate sed o vi

4) Inserire il parametro finale della linea precedente.

A volte si utilizza un parametro lungo in un comando ed è necessario utilizzarlo di nuovo in quello successivo, ad esempio si desidera creare un percorso e fare cd in esso, ci sono 2 modi per farlo:

# mkdir -p /this/is/mylong/pathto/some/directory
# cd $_

$_ indica esattamente l’ultimo parametro del comando usato precedentemente, ma forse non si vuole quel parametro, ma un altro, per navigare tra i parametri che avete usato nei vostri comandi precedenti è possibile utilizzare la scorciatoia da tastiera Alt + . questo stampa l’ultimo parametro, premetelo di nuovo per selezionare il precedente ultimo parametro, e così via.

5) Elencare solo le sottodirectory della directory in cui ti trovi.

A volte è sufficiente conoscere l’elenco delle sottodirectory e non si desidera visualizzare tutti i file, per raggiungere questo obiettivo utilizzare:

ls -d */

Lo switch ‘-d’ imposta ‘ls’ per mostrare solo le voci di directory, ma se non diamo un parametro, utilizzerà la directory corrente come parametro, e quindi mostrerà solo “.” .

Scorciatoie da tastiera

6) Ctrl + r inizia una “ricerca incrementale inversa” attraverso la cronologia dei comandi. Mentre si continua a scrivere, recupera il comando più recente che contiene tutto il testo immesso.Molto meglio di qualcosa del tipo:

history |grep string

Nel caso in cui si perda il comando che si sta cercando dando un Ctrl + r di troppo, si può invertire la direzione della ricerca con la combinazione CTRL + s
Tuttavia, questa è normalmente mappato con XOFF (interrompi flusso dati). Dal momento che non è più utile, poichè non utilizziamo lenti terminali seriali, è possibile disattivare la mappatura con:

stty -ixon

7) Ctrl + x + e Richiama rapidamente l’editor predefinito (variabile di ambiente $EDITOR) per scrivere un comando lungo e complesso o difficile. La prossima volta che utilizzate la shell, provate a digitare ctrl-x e (ovvero tenendo premuto ctrl premere il tasto x, quindi e). vedrete il comando che state scrivendo nel vostro editor, dove è possibile modificarlo, una volta che si salva e si esce dall’editor il comando modificato verrà eseguito automaticamente sulla vostra shell.

Per altri comandi interessanti vi consiglio di guardare http://www.commandlinefu.com/

Popular Posts:

flattr this!

  9 Responses to “7 funzionalità nascoste della bash”

  1. Nice post. In addition to your !! comment running the last command, you can also use something like !ls to run the last ls command you used, or !rmdir to run the last call to rmdir. It pattern matches too meaning you could just do !rmd and that would match the first command in your history starting with rmd, most likely rmdir.

  2. I didn’t know the Ctrl+x+e trick, really usefull, thanks!

  3. Wow very useful tricks! Thanks for sharing!

  4. “ls -d” is not a Bash feature. “ls” is an external command, “-d” is a feature of “ls”.

    “!$” also refers to the last word on the preceding command line.

    “!!:p” prints, but does not execute, the previous command.

    “fc” invokes your default editor to edit your previous command.

    “set -x” enables debugging (as “bash -x”), but for your current Bash instance. “set +x” disables it.

    • One can also use “!-n”, where n equals the nth previous command. I use a prompt that has the bash line number in it to enable ease of use of this (trivial example, but…):

      [34@19:50:19 user@machine]:~>vi rc.conf
      [35@19:50:29 user@machine]:~>cp /etc/rc.conf ./
      [36@19:50:36 user@machine]:~>!-2
      
    • It’s not the “ls -d” that is the bash feature in #5, it’s the “*/” which bash expands to a list of (non-hidden) directories. You could equally well use this feature with:

      printf ‘%s\n’ */

      instead of ls -d */

  5. Just a note about #5: that will only list non-hidden directories, just in case you were looking for .something directories.

  6. I forgot about ^search^replace^ – handy if I type “apt-cache install ” accidentally instead of “apt-get install …”,

    two other shortcuts I use are “cd -” to switch between the previously viewed directory,
    and “cd” on its own to go home.

  7. Always done
    ^oldstring^newstring
    Is there any reason we should be doing
    ^oldstring^newstring^
    ?

 Leave a Reply

(required)

(required)


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>