я использовал
history | less
чтобы получить строки предыдущих команд и из чисел на левой стороне, я нашел строку, которую я хотел повторить (например, 22) и сделал
!22
в командной строке, и это сработало - выполнение набора команд на линии, которую я делал в то время. Я не могу понять, где используется восклицательный знак, что он представляет с точки зрения действий, предпринятых bash, и где его использовать. Из документации я не вижу объяснения, которое является «материальным».
Ответы:
!
это функция, которая первоначально появилась в оболочке C , еще в те дни, когда можно было рассчитывать, что на терминалах есть клавиши со стрелками. Это особенно полезно, если вы добавляете текущий номер команды в приглашение (PS1="\!$ "
), чтобы вы могли быстро просмотреть свой экран, чтобы получить номера для прошлых команд.Теперь, когда вы можете использовать клавиши со стрелками и тому подобное Ctrl-Rдля поиска в истории команд, я не вижу особой пользы для этой функции.
Один из вариантов, который вы все еще можете найти полезным, -
!!
это повторное выполнение предыдущей команды. Сам по себе я не нахожу !!Enterничего быстрее, чем просто ↑ Enter, но это может быть полезно, когда объединено в большую команду.Пример. Распространенная ошибка пилот-сигнала в
sudo
основанных системах - забытьsudo
префикс команды, требующей дополнительных привилегий. Новичок перепечатывает всю команду. Прилежный ученик редактирует команду из истории команд оболочки. Просветленный один из типовsudo !!
.Bash позволяет отключить
!
обработку в оболочке с помощьюset +o histexpand
илиset +H
. Вы можете отключить его в Zsh с помощьюset -K
.источник
sudo
или что-то еще), то вы можете это сделатьsudo !!
, например. Это может быть немного быстрее, чем «Up / Ctrl-A (или Home, если вам повезет) / sudo / space / enter». YMMV. :)echo 'Hi!'
или,echo "Hi!"
либоecho Hi\!
. Все делают одно и то же.setopt NO_BANG_HIST
в Zsh может быть более запоминающимся, чем-K
.Если здесь нет более длинного ответа, то, конечно, есть один, посвященный Super User, поскольку я недавно его прочитал. На странице руководства bash вы можете найти огромный раздел, озаглавленный РАСШИРЕНИЕ ИСТОРИИ .
Вы можете сделать целый хост больше, чем просто запустить последнюю команду или команду номер X. Вы можете сделать что-то вроде
!cat
запуска последней команды, которая началась сcat
. Или!?bash?:s/bash/csh/
запускает последнюю содержащую команду,bash
но заменяет ее наcsh
.источник
!!:s/bash/csh/
фактически запускает последнюю команду , а затем заменяет bash на csh, если он присутствует. Не последняя команда, включающая bash. Это было бы!?bash?:s/bash/csh/
или , может быть!?bash?:s/%/csh/
man
страницы, эта функция невероятно неясна. Спасибо за указание на соответствующий раздел - это единственное место в реальных документах, где они достаточно подробно объясняют это.Многое можно сделать с
!
такими как:!-3
!ls
и многое другое. Смотрите 15 примеров расширения Linux Bash History, которые вы должны знать
источник
Мой друг написал мне по электронной почте это:
источник
Конечно, вы можете сделать,
!!
чтобы повторно использовать последнюю команду в оболочке bash. И затем есть!$
повторно использовать последнюю часть вашей последней команды.например, посмотреть какой-нибудь файл
Если вы теперь хотите редактировать тот же файл, вы можете использовать,
!$
чтобы получить только путь к файлу из последней командыисточник
$touch f1 f2
и затем$vim !$
будет оценивать с$vim f2