Posso usare '!!' in alias o script?


10

Nel terminale posso usare !!quale riferimento al mio comando precedente.
È possibile usarlo in un alias? L'ho provato, ma ciò che accade è che i doppi punti esclamativi vengono interpretati letteralmente.

Quello che voglio avere possibile è:

  1. Inserisco qualche comando
  2. Digito un alias che includerà ciò che è stato inserito nel passaggio 1

Se esiste una soluzione che utilizza script che è anche accettabile.


qual è il tuo obiettivo principale? aggiungere più opzioni all'ultimo comando?
Sergiy Kolodyazhnyy,

Nessun mio obiettivo è quello di digitare rapidamente un lungo comando che uso spesso. Nel mezzo c'è una lunga corda che spesso è il comando precedente
Ludwig Magnusson,

sembra che tu voglia solo il fccomando in modo da aprire un editor di testo, perché questo è il modo più semplice per modificare i comandi lunghi. Lascia che lo aggiunga al mio post. Inoltre, potresti fornire un esempio di comando?
Sergiy Kolodyazhnyy,

Aggiunta una modifica al mio post
Sergiy Kolodyazhnyy,

Risposte:


11

Il comando che elenca l'ultimo comando eseguito è fc -nl -1. Usando la sostituzione dell'output, possiamo aggiungere più parametri allo stesso contenuto

$> ls /etc/passwd
/etc/passwd
$> $(fc -nl -1)  /etc/group                                                     
/etc/group  /etc/passwd
$> 

La citazione, tuttavia, può essere un problema con questo approccio

Una caratteristica molto interessante di fcè che se si esegue il fccomando da solo, si aprirà l'editor di testo specificato nella FCEDITvariabile (che probabilmente si desidera archiviare ~/.bashrc) e il contenuto della riga sarà l'ultimo comando. Per tua comodità, ti suggerisco di usare nanocome editor di testo, ma se lo sai vim , ancora meglio.

Ad esempio, cosa succede se devo modificare la qdbus org.ayatana.bamf /org/ayatana/bamf/matcher org.ayatana.bamf.matcher.ActiveWindowlinea enorme, giusto? Ma con fc, posso aprire vime modificare /org/ayatana/bamf/matcher, salvare, uscire e funzionerà.


9

Non puoi usare !!ma ...

Dal manuale :

Un alias utile da usare con il comando fc è r='fc -s', in modo che digitando 'r cc' si esegua l'ultimo comando che inizia con cc e digitando 'r' si esegue nuovamente l'ultimo comando.


Quindi questo mi permetterà di aggiungere qualcosa all'inizio del mio ultimo comando. Che ne dici di questo?
Ludwig Magnusson,

8

Se si insiste sull'uso della !!sintassi di espansione della cronologia anziché di fc(già menzionata), esiste un modo.

Per impostazione predefinita, l' historyespansione è disabilitata per sessioni shell non interattive, ad esempio negli script.

Per abilitare l'espansione della cronologia negli script, abilitare prima le opzioni di shell pertinenti:

set -o history 
set -o histexpand

set -o histexpandpuò anche essere scritto set -H.

Ora le operazioni di espansione della storia, ad esempio !!, funzionerebbero all'interno della sceneggiatura.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.