
Этот вопрос является вариантом на темуранее спрашивали Как повторить текущий введенный параметр в консоли bash?
Часто мне хочется немного переименовать файл в оболочке, например:
$ mv test_1.py _test_1.py
или
$ mv test_1.py test_1.py.org
Я мог бы использовать предложения вКак повторить текущий введенный параметр в консоли bash?, но
есть лимагия башачто позволит мне просто ссылаться на ранее введенный параметр?
например, если магия заключается $M,
в том, что - для вышеизложенного - я бы использовал:
$ mv test_1.py _$M.py
$ mv test_1.py $M.org
решение1
Магия работает в два этапа.
Во-первых, echo имеет псевдоним e (echo также будет работать, если вы не хотите использовать псевдоним); во-вторых, мы используем «раскрытие фигурных скобок»:
$ 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.
!* можно расширить пробелом, если вывключить магическое пространствоили если вынаборshopt -s histverify
После нажатия Enter вам будет предоставлена возможность просмотреть эффект расширения истории, прежде чем нажать Enter (еще раз) для выполнения.
Другой пример:
$ 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).
$
Также есть история расширения, !#
которая означает командную строку, набранную до сих пор, и выбор первой команды :1
. Если у вас включен magic-space, вы вводите mv test1.py !#:1
и нажимаете пробел, команда изменится:
$ 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.