In qualche modo riesco a influenzare il comando originale, ovvero la mia modifica sostituisce il comando originale nella cronologia.
Destra. Se torni indietro nella cronologia e modifichi la riga senza premendo Invio per eseguire il comando ma spostandoti invece su un'altra voce della cronologia, hai appena modificato la voce della storia. Se poi elenchi la cronologia, vedrai un *
sulla riga che indica che l'hai modificato. Trovo questa "caratteristica" immensamente frustrante. Altri hanno fornito buoni esempi di come riprodurlo.
Il mio obiettivo è evitarlo, quindi qualsiasi modifica a un comando precedente viene sempre aggiunta alla cronologia e non sostituisce mai l'originale.
Anch'io volevo disabilitarlo. Ho trovato la soluzione tramite questa risposta su unix.stackexchange.
Per riassumere, devi abilitare il revert-all-at-newline
readline che è disattivata per impostazione predefinita. Se l'impostazione è attiva, bash annullerà tutte le modifiche apportate alla cronologia quando eseguirai il comando successivo.
Per abilitare questa impostazione nella tua shell, dovresti aggiungere quanto segue al tuo ~/.inputrc
file e riavvia la tua shell:
$include /etc/inputrc
set revert-all-at-newline on
La prima riga è necessaria perché immagino che se fornisci il tuo .inputrc
archiviare il /etc/inputrc
predefinito file non è incluso, il che probabilmente non è quello che desideri.
Se torni a un comando precedente e lo modifichi, ma poi NON lo esegui (usa invece i comandi della cronologia per andare a qualche altro comando ed eseguirlo), le modifiche rimarranno lì nell'elenco della cronologia.
Premendo Ctrl + C , dopo la modifica, contrasta questo comportamento. Lascia intatto il comando originale, ovvero annulla il ricordo delle modifiche all'originale.
Ecco la mia risposta, per favore correggi o fornisci maggiori dettagli se puoi.
Quando l'opzione "vi" è impostata in bash ("set -o vi" -- "Usa un'interfaccia di modifica della riga di comando in stile vi"), ci sono due modalità di modifica di un comando dalla cronologia.
La prima modalità (chiamiamola "base") è quando inizi a modificare immediatamente usando Backspace, Canc e i tasti dei caratteri.
L'altra modalità è la "modalità vi", inserita quando premi Esc.
Se vuoi mantenere intatta la cronologia, NON utilizzare entrambe le modalità nella stessa modifica. Non so come funzioni esattamente bash, ma puoi pensarla in questo modo:
- L'inserimento della "modalità vi" applica tutte le modifiche apportate in "modalità base" al comando originale e crea una copia del comando che puoi modificare ulteriormente utilizzando i comandi in stile vi.
- Le modifiche vengono applicate quando premi Invio (esegui), Su, Giù o j,k (vai a un altro comando nella cronologia).
- Le modifiche non vengono applicate se premi Ctrl-C.
- L'utilizzo SOLO dell'editing di base o in stile vi non influisce sul comando originale nella cronologia.