
Esta pregunta es una variante de unapreguntado previamente ¿Cómo repetir el parámetro actualmente escrito en la consola bash?
Muchas veces, me encuentro queriendo cambiar ligeramente el nombre de un archivo en el shell, por ejemplo:
$ mv test_1.py _test_1.py
o
$ mv test_1.py test_1.py.org
Me vendrían bien las sugerencias de¿Cómo repetir el parámetro actualmente escrito en la consola bash?, pero
Hay algunagolpe de magia¿Eso me permitirá simplemente hacer referencia al parámetro escrito anteriormente?
por ejemplo, si la magia es $M,
entonces, para lo anterior, usaría:
$ mv test_1.py _$M.py
$ mv test_1.py $M.org
Respuesta1
La magia funciona en dos partes.
Primero, echo tiene un alias para e (echo también funcionará si no desea ningún alias); En segundo lugar, utilizamos "expansión de llaves":
$ e mv {,_}test_1.py # Try to see if it works as expected.
mv test_1.py _test_1.py
# If the arguments are what you want:
$ mv {,_}test_1.py # Press ↑ (up arrow), remove `e`
$ !* # OR: Type `!*` --> last line after arg 0.
$ mv {,_}test_1.py # If `histverify` is set.
El !* puede ampliarse con un espacio sihabilitar el espacio mágicoo si tucolocarshopt -s histverify
Después de presionar Enter, se le dará la oportunidad de revisar el efecto de la expansión del historial antes de presionar Enter (nuevamente) para ejecutar.
El otro ejemplo:
$ e mv test_1.py{,.org}
mv test_1.py test_1.py.org # The result of the brace expansion.
# Review it, and if it is ok:
$ !* # type !* (use either space or enter)
# That will depend on how you setup it.
$ mv test_1.py{,.org} # The command appear again (enter to execute).
$
También está la expansión del historial, !#
que significa la línea de comando escrita hasta el momento y la selección del primer comando :1
. Si tiene habilitado el espacio mágico, escribe mv test1.py !#:1
y presiona la barra espaciadora, el comando cambiará:
$ mv test_1.py !#:1 # Press space.
$ mv test_1.py test_1.py # The command line change to this.
$ mv test_1.py test_1.org # Edit and press enter to execute.