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

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

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

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

  • Как получить второй для последнего параметра предыдущей команды в bash?
  • Храните два файла истории bash, один с ignoredups, один со всем
  • Переменные в истории?
  • Выполнять команды из истории, которые соответствуют регулярному выражению или grep
  • Объявление Баша -p HISTIGNORE приносит бах! Зачем?
  • zsh history: комментируйте опасные команды: `#`
  • Выполнить скрипт bash так, чтобы каждая команда была индивидуально доступна в истории команд оболочки
  • Что означает атрибут «a» в lsattr?
  • 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 и Unix - лучшая ОС в мире.