Как этот псевдоним bash повторяет последнюю команду как sudo?

Недавно я наткнулся на этот гениальный псевдоним bash, чтобы повторить последнюю выданную команду, но как sudo. Это можно сделать, используя sudo !! непосредственно в терминале после неудачной команды.

Псевдоним, который я нашел, это alias mycmd='sudo $(history -p \!\!)'

Мне просто не ясно, как это работает.

One Solution collect form web for “Как этот псевдоним bash повторяет последнюю команду как sudo?”

$(history -p \!\!) – это способ выполнения последней команды без добавления ее в историю. Из help history :

  -p perform history expansion on each ARG and display the result without storing it in the history list 

В bash, !! расширяется до последней выполненной команды, но вы не можете напрямую использовать это в псевдонимах, так как это расширение выполняется задолго до расширения псевдонима. (Расширение истории – одно из самых ранних событий – это происходит даже до расширения брекетов (как правило, сначала ).)

Таким образом, вы должны использовать какой-то способ для выполнения последней команды, и это можно сделать с помощью history -p , которая расширяется !! как будет работать оболочка.

Хотя я не знаю, почему они сбежали ! , Для меня он отлично работает без обратной косой черты.

  • как записывать всех, кто входит в мои Linux-машины, и записывать их
  • «History» перестает работать при запуске внутри сценария bash
  • Как просмотреть все команды с момента последней установки системы (5 месяцев)?
  • zsh history - полный путь
  • Включить историю для оболочки
  • Липкие записи в истории оболочки
  • Что делает команда history! # Do?
  • Livesearch с первыми 10 матчами в качестве предварительного просмотра для zsh-history?
  • Экспорт истории команд в скрипт командной оболочки
  • Стойкие аргументы оболочки
  • После закрытия вкладки в терминале Gnome, как получить в ней историю команд?
  • Как предотвратить сохранение «выхода» при закрытии SSH-соединения?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.