Una shell più agile!

Come sapete uso un mac per sviluppare. In symfony, il framework php che utilizzo per sviluppare applicazioni web, è necessario interagire molto con la shell. La shell (per stesse storcendo la bocca) è il terminale , la più classica linea di comando.

Ora premesso che a me la linea di comando piace moltissimo, in symfony ci sono molti lunghissimi comandi che non è sempre piacevole impartire n volte. Quando si fanno i test, quando si rigenerano le build dei modelli. Insomma, i comandi si ripetono molte volte.

uno dei comandi piu lunghi è il seguente:


php symfony doctrine:build --all --and-load --no-confirmation

Ora si capisce che scrivere questa cosa spesso è una rottura. Ovviamente si può usare la scorciatoia messa a disposizione dalla shell e usare le frecce per cercare i comandi già impartiti, ma non è molto rapido, soprattutto quando si sono già scritti molti comandi.

In questi casi usavo un trick piu furbetto:


history | grep build

questo comando restituisce la lista dei precedenti comandi che contengono la parola ricercata che sono stati impartiti dalla console.


167 php symfony doctrine;build --all --no-confirmation
168 php symfony doctrine;build --all --no-confirmation --and-load
169 php symfony doctrine:build --all
170 php symfony doctrine:build --all --env=test
253 php symfony doctrine:build --all --and-load --env=test
257 php symfony doctrine:build --all --and-load --env=test
325 php symfony doctrine:build --all --and-load --no-confirmation
329 php symfony doctrine:build --all --and-load --no-confirmation
330 php symfony doctrine:build --all --and-load --no-confirmation
372 php symfony doctrine:build --all --env=test --no-confirmation
421 php symfony doctrineadsfasd fasd:build --all --env=test

A fianco ad ogni istruzione c’e un numero identificativo utile per richiamare il comando scrivendo

!421

Ora, questo trick fa sicuramente il suo sporco lavoro, ma richiede veramente troppi step.
C’e invece una soluzione migliore, quella che consiste nel creare nella propria directory home il file “.inputrc” e inserirci all’interno queste righe:

# this makes the "delete" key work rather than
# just entering a ~
"\e[3~": delete-char

# these allow you to use ctrl+left/right arrow keys
# to jump the cursor over words
"\e[5C": forward-word
"\e[5D": backward-word

# these allow you to start typing a command and
# use the up/down arrow to auto complete from
# commands in your history
"\e[B": history-search-forward
"\e[A": history-search-backward

# this lets you hit tab to auto-complete a file or
# directory name ignoring case
set completion-ignore-case On

# I'm not sure what keys these are!
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[2~": quoted-insert

Il risultato che si ottiene è che sarà sufficiente scrivere la prima parola di un comando che è stato già impartito e utilizzare il tasto freccia su per scorrere la lista delle istruzioni che cominciano il quel modo.

Basterà quindi digitare ( per esempio ) ssh + “freccia su” per ottenere la lista di tutte le connessioni ssh ( che si trovano ancora nell’history )

Questo trick è applicabile sia a macchine Mac che Linux ( ovviamente ). Solo che le istruzioni di inserire nel file sono diverse, non so perché, forse perché cambia la mappatura della tastiera.
Normalmente questa funzionalità viene mappata di default su i tasti “pagup” e “pagdown”, ma su i portatili non è molto comoda, quindi è stata mappata su “frecciasu” e “frecciagiu”.

Su Linux, si puo modificare direttamente il file “/etc/inputrc” e decommetare le linee come sopra.

7 pensieri su “Una shell più agile!

  1. Ciao,
    da qualche giorno ho scoperto symfony vorrei fare delle prove per poi iniziare a studiarlo, ma purtroppo ho delle difficoltà e non riesco a installarlo sul mio Mac con Mamp, tu puoi aiutarmi o sai se esiste uno specifico tutorial da seguire per fare l’installazione?
    Grazie mille

    1. Probabilmente hai avuto problemi nell’installazione di symfony su MAMP perche hai provato tramite PEAR,
      ti consiglio invece di scaricare direttamente il pacchetto completo, metterlo nella document root di mamp e poi seguire le normali istruzione che fornisce il tutorial come joobet.

    2. Ciao David,

      che problema riscontri?

      Io ho dovuto combattere col MAC di un collega, ma installando MAMP e settando i vhost correttamente siamo riusciti, tranquillamente, a far funzionare symfony con MAMP.

  2. davidino :
    Si c’e! ma da quanto ho visto non hai accesso alla modifica del comando, puoi solo rilanciarlo!
    (per lo meno, così mi è sembrato)

    In bash se vuoi puoi partire da quel risultato di matching e poi modificarlo. Al prossimo PUG ne parliamo. Ciao!

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...