Ricerca nel sito web

Il tutorial sul comando fc con esempi


Visualizza o esegui comandi dall'elenco della cronologia utilizzando il comando fc in Linux

Il comando fc, abbreviazione di fix commands, è un comando integrato nella shell utilizzato per elencare, modificare e rieseguire la maggior parte comandi immessi di recente in una shell interattiva. Puoi modificare i comandi immessi di recente nel tuo editor preferito ed eseguirli senza dover digitare nuovamente tutti i comandi.

Il comando fc può essere utile per correggere gli errori di ortografia nei comandi precedentemente inseriti ed evitare la ripetizione di comandi lunghi e complicati. Poiché è integrato nella shell, è disponibile nella maggior parte delle shell, incluse Bash, Zsh, Ksh ecc. In questo breve tutorial impareremo a usare il comando fc in Linux.

Elenca i comandi eseguiti di recente con il comando fc

Se esegui il comando fc -l senza argomenti, verranno visualizzati gli ultimi 16 comandi.

$ fc -l
507 fish
508 fc -l
509 sudo netctl restart wlp9s0sktab
510 ls -l
511 pwd
512 uname -r
513 uname -ms
514 touch ostechnix.txt
515 vi ostechnix.txt
516 echo "Welcome to OSTechNix"
517 sudo apcman -Syu
518 sudo pacman -Syu
519 more ostechnix.txt 
520 wc -l ostechnix.txt 
521 cat ostechnix.txt 
522 clear

Elenca i comandi recenti in ordine inverso

Per invertire l'ordine dei comandi (i comandi più recenti sono elencati per primi), utilizza il flag -r.

fc -r

Elenca i comandi recenti senza numeri di riga

Come avrai notato, tutti i comandi eseguiti in precedenza vengono visualizzati con numeri di prefisso. Puoi sopprimere i numeri di riga utilizzando il flag -n.

$ fc -ln
 nano ~/.profile
 source ~/.profile
 source ~/.profile
 fc -ln
 fc -l
 sudo netctl restart wlp9s0sktab
 ls -l
 pwd
 uname -r
 uname -ms
 echo "Welcome to OSTechNix"
 sudo apcman -Syu
 cat ostechnix.txt 
 wc -l ostechnix.txt 
 more ostechnix.txt 
 clear

Ora non vedrai i numeri di riga.

Visualizza risultato a partire da un comando specifico

Per elencare il risultato a partire da un comando specifico, utilizza semplicemente il numero di riga insieme all'opzione -l. Ad esempio, per visualizzare i comandi a partire dalla riga numero 520 fino ad oggi, facciamo:

$ fc -l 520
520 ls -l
521 pwd
522 uname -r
523 uname -ms
524 echo "Welcome to OSTechNix"
525 sudo apcman -Syu
526 cat ostechnix.txt 
527 wc -l ostechnix.txt 
528 more ostechnix.txt 
529 clear
530 fc -ln
531 fc -l

Invece di usare i numeri di riga, possiamo anche usare le stringhe. Ad esempio, elenca i comandi a partire dal comando pwd fino al recente, basta usare la lettera iniziale di quel comando (ad esempio p) come di seguito.

$ fc -l p
521 pwd
522 uname -r
523 uname -ms
524 echo "Welcome to OSTechNix"
525 sudo apcman -Syu
526 cat ostechnix.txt 
527 wc -l ostechnix.txt 
528 more ostechnix.txt 
529 clear
530 fc -ln
531 fc -l
532 fc -l 520
533 fc -l 520 525
534 fc -l 520
535 fc -l 522
536 fc -l l

Elenca i comandi recenti entro un intervallo specifico

Per elencare i comandi entro un intervallo specifico, ad esempio da 520 a 525, procedi:

$ fc -l 520 525
520 ls -l
521 pwd
522 uname -r
523 uname -ms
524 echo "Welcome to OSTechNix"
525 sudo apcman -Syu

Elenca i comandi tra intervalli specifici

Per vedere tutto tra il comando pwd e more, puoi utilizzare:

fc -l p m

Oppure utilizza la combinazione della prima lettera del comando iniziale e del numero di riga del comando finale:

fc -l p 528

Oppure, solo i numeri di riga dei comandi iniziali e finali:

fc -l 521 528

Tutti questi tre comandi mostreranno lo stesso risultato.

Modifica ed esegui nuovamente l'ultimo comando automaticamente

A volte potresti aver scritto male un comando precedente. In tali situazioni, puoi facilmente modificare gli errori di ortografia del comando utilizzando l'editor predefinito ed eseguirlo senza doverlo riscrivere.

Per modificare l'ultimo comando ed eseguirlo nuovamente, eseguire:

fc

Questo aprirà il tuo ultimo comando nell'editor predefinito.

Modifica ed esegui nuovamente l'ultimo comando utilizzando il comando fc

Come puoi vedere nello screenshot qui sopra, il mio ultimo comando è stato "fc -l". Ora puoi apportare qualsiasi modifica al comando ed eseguirlo nuovamente automaticamente dopo aver salvato e chiuso l'editor. Ciò può essere utile quando si utilizzano comandi o argomenti lunghi e complicati.

Nota importante: tieni presente che anche questo può essere un distruttivo . Ad esempio, se il comando precedente era un comando mortale come "rm -fr ", verrà eseguito automaticamente e potresti perdere i tuoi dati importanti. Quindi, DEVI fare molta attenzione mentre usi il comando fc.

Modificare l'editor predefinito in Modifica comandi

Un'altra opzione degna di nota di fc è "e" che viene utilizzata per scegliere un editor diverso per modificare i comandi. Ad esempio, possiamo utilizzare l'editor "nano" per modificare l'ultimo comando come di seguito.

fc -e nano

Questo comando aprirà l'editor nano (invece dell'editor predefinito) per modificare l'ultimo comando.

Cambia l'editor predefinito per il comando fc

Imposta l'editor predefinito per il comando fc

Potrebbe essere necessario molto tempo utilizzare l'opzione -e per ciascun comando. Per rendere il nuovo editor come predefinito, imposta semplicemente la variabile di ambiente FCEDIT sul nome dell'editor che desideri che fc utilizzi.

Ad esempio, per impostare "nano" come nuovo editor predefinito, modifica il tuo ~/.profile o il file di ambiente:

vi ~/.profile

Aggiungi la seguente riga:

FCEDIT=nano

Puoi anche utilizzare il percorso completo dell'editor come di seguito.

FCEDIT=/usr/local/bin/emacs

Digita :wq per salvare e chiudere il file. Per aggiornare le modifiche, eseguire:

source ~/.profile

D'ora in poi digita semplicemente "fc" per modificare l'ultimo comando utilizzando l'editor "nano".

Esegui nuovamente l'ultimo comando senza modificarlo

Sapevamo già che se eseguiamo "fc" senza argomenti, caricherà l'editor predefinito con il comando più recente. A volte potresti non voler modificare, ma semplicemente eseguire l'ultimo comando.

Per fare ciò, utilizza il simbolo del trattino (-) alla fine come mostrato di seguito.

$ echo "Welcome to OSTechNix"
Welcome to OSTechNix

$ fc -e -
echo "Welcome to OSTechNix"
Welcome to OSTechNix

Come vedi, fc non ha modificato l'ultimo comando (ovvero echo "Benvenuto in OSTechNix") anche se ho utilizzato l'opzione -e.

Tieni presente che alcune opzioni sono specifiche della shell. Potrebbero non funzionare in altre shell. Ad esempio, nella shell zsh è possibile utilizzare le seguenti opzioni. Non funzioneranno nelle shell Bash o Ksh.

Visualizza quando sono stati eseguiti i comandi

Per visualizzare quando sono stati eseguiti i comandi, utilizza -d come di seguito.

fc -ld
1 18:41 exit
2 18:41 clear
3 18:42 fc -l
4 18:42 sudo netctl restart wlp9s0sktab
5 18:42 ls -l
6 18:42 pwd
7 18:42 uname -r
8 18:43 uname -ms
9 18:43 cat ostechnix.txt
10 18:43 echo "Welcome to OSTechNix"
11 18:43 more ostechnix.txt
12 18:43 wc -l ostechnix.txt
13 18:43 cat ostechnix.txt
14 18:43 clear
15 18:43 fc -l

Ora vedi il tempo di esecuzione dei comandi eseguiti più recentemente.

Possiamo anche visualizzare il timestamp completo di ciascun comando utilizzando l'opzione -f.

 fc -lf
 1 4/5/2018 18:41 exit
 2 4/5/2018 18:41 clear
 3 4/5/2018 18:42 fc -l
 4 4/5/2018 18:42 sudo netctl restart wlp9s0sktab
 5 4/5/2018 18:42 ls -l
 6 4/5/2018 18:42 pwd
 7 4/5/2018 18:42 uname -r
 8 4/5/2018 18:43 uname -ms
 9 4/5/2018 18:43 cat ostechnix.txt
 10 4/5/2018 18:43 echo "Welcome to OSTechNix"
 11 4/5/2018 18:43 more ostechnix.txt
 12 4/5/2018 18:43 wc -l ostechnix.txt
 13 4/5/2018 18:43 cat ostechnix.txt
 14 4/5/2018 18:43 clear
 15 4/5/2018 18:43 fc -l
 16 4/5/2018 18:43 fc -ld

Naturalmente, gli europei possono utilizzare il formato della data europea utilizzando l'opzione -E.

 fc -lE
 2 5.4.2018 18:41 clear
 3 5.4.2018 18:42 fc -l
 4 5.4.2018 18:42 sudo netctl restart wlp9s0sktab
 5 5.4.2018 18:42 ls -l
 6 5.4.2018 18:42 pwd
 7 5.4.2018 18:42 uname -r
 8 5.4.2018 18:43 uname -ms
 9 5.4.2018 18:43 cat ostechnix.txt
 10 5.4.2018 18:43 echo "Welcome to OSTechNix"
 11 5.4.2018 18:43 more ostechnix.txt
 12 5.4.2018 18:43 wc -l ostechnix.txt
 13 5.4.2018 18:43 cat ostechnix.txt
 14 5.4.2018 18:43 clear
 15 5.4.2018 18:43 fc -l
 16 5.4.2018 18:43 fc -ld
 17 5.4.2018 18:49 fc -lf

Riepilogo

Vorrei riassumere i punti chiave importanti.

  • Quando viene eseguito senza argomenti, fc caricherà il comando più recente nell'editor di testo predefinito.
  • Quando viene eseguito con un argomento numerico, fc carica l'editor con il comando con quel numero specificato.
  • Quando viene eseguito con un argomento stringa, fc carica il comando più recente iniziando con quella stringa specificata.
  • Quando viene eseguito con due argomenti per fc , gli argomenti specificano l'inizio e la fine di un intervallo di comandi.

Nota: alcune opzioni sono deprecate nelle recenti versioni di BASH.

Ottenere aiuto

Per maggiori dettagli, fare riferimento alla pagina man del comando fc.

man fc

In alcune distribuzioni, la pagina di manuale per il comando fc non è disponibile. In questi casi, puoi digitare il comando fc --help per visualizzare la sezione della guida.

fc --help
fc: fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]
    Display or execute commands from the history list.
    
    fc is used to list or edit and re-execute commands from the history list.
    FIRST and LAST can be numbers specifying the range, or FIRST can be a
    string, which means the most recent command beginning with that
    string.
    
    Options:
      -e ENAME	select which editor to use.  Default is FCEDIT, then EDITOR,
    		then vi
      -l 	list lines instead of editing
      -n	omit line numbers when listing
      -r	reverse the order of the lines (newest listed first)
    
    With the `fc -s [pat=rep ...] [command]' format, COMMAND is
    re-executed after the substitution OLD=NEW is performed.
    
    A useful alias to use with this is r='fc -s', so that typing `r cc'
    runs the last command beginning with `cc' and typing `r' re-executes
    the last command.
    
    Exit Status:
    Returns success or status of executed command; non-zero if an error occurs.

Spero che questo ti aiuti.

Lettura correlata:

  • Diversi modi per ripetere il tuo ultimo comando in Linux
  • Come cancellare un comando specifico dalla cronologia di Bash in Linux
  • Come cancellare la cronologia della riga di comando in Linux

Articoli correlati