Запустите команду с аргументом из последней команды

34

При запуске команд иногда может потребоваться запустить команду с аргументом из последней команды. Как ты можешь это сделать?

Конечно, за исключением использования клавиш со стрелками и Delклавишами: ... DelDelDel... Del<new_command>.

Раду Рэдяну
источник

Ответы:

45

Например, если вы запустите эту команду:

mkdir long_path_here/new_dir

скорее всего, вы захотите перейти в недавно созданный каталог. Вы можете сделать это, используя следующие «ярлыки»:

  • cd Esc.- введите cdи после нажатия, Escа затем .(не в то же время). Если предыдущая команда не имеет аргументов, вы получите саму предыдущую команду.
  • cd !*- в этом случае вы получите все аргументы из команды previuos. Если предыдущая команда не имеет аргументов, вы ничего не получите.
  • cd Alt+ .- введите cdи после нажатия Altи .(одновременно). Фактически, используя этот способ и продолжая нажимать .(не отпуская Alt), вы получите последний аргумент для каждой команды из истории. Если у команды нет аргументов, вы получите саму команду.

В общем: <command> Esc.или <command> !*или <command> Alt+ ..

Раду Рэдяну
источник
вау, ты спас мне сотни часов, которые я бы
потратил
32

Есть несколько сочетаний клавиш, если вам нужны все аргументы из предыдущей команды или только последний аргумент.

  • Для всех аргументов: <command> !*
  • Только для последнего аргумента: <command> !$

Примеры:

ls foo/ bar/
ls !* # Gives the results of ls foo/ bar/

ls foo/ bar/
ls !$ # Gives the results of ls bar/

Если вам нужен один аргумент из списка аргументов предыдущей команды, вы можете использовать <command> !!:<argNumber>

Пример:

ls foo/ bar/ baz/
ls !!:2 # Gives the results of ls bar/
ls foo/ bar/ baz/
ls !!:1 # Gives the results of ls foo/
RandomMooCow
источник
2
Вам нужно только один !в одной версии ARG, например, !:2. Предполагается, что по умолчанию bash.
belacqua
3
Вы также можете использовать !^вместо !:1.
Пэдди Ландау
7

Упоминается !*и !$это хорошая вещь, но когда вам нужно сделать небольшое редактирование readline ярлыки приходят на помощь!

Например, вместо бесчисленного ... DelDelDel... Delвы можете просто нажать Ctrl-a(перейти к началу строки) Alt+d(удалить до конца слова)

Для получения дополнительной информации man readlineи поиска Default key bindings.

defhlt
источник
4

Чтобы взять nаргумент th из предыдущей команды, введите Alt+ n+ Alt_. Например, после:

$ echo 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10

набрав с echoпоследующим, Alt2Alt_вы получите это в следующем приглашении:

$ echo 2

«Скриншот» после того, как вы нажали Alt2:

(arg: 2) echo

Вы можете повторить Alt_несколько раз, чтобы получить nth аргумент предыдущих команд подряд.

Еще одна полезная идея - определить псевдоним r="fc -s". Затем вы можете сделать замену команды:

$ echo 1
1
$ r echo=history
history 1
27755  history 1
Alok
источник