Как этот псевдоним 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 , которая расширяется !! как будет работать оболочка.

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

  • Стрелка вверх в пустой строке в ksh93
  • как записывать всех, кто входит в мои Linux-машины, и записывать их
  • Как просмотреть все команды с момента последней установки системы (5 месяцев)?
  • Как автоматически завершить команду из истории команд?
  • Как вернуться из поиска в исходную команду
  • Shell - работа с несколькими файлами истории команд
  • zle reset-prompt предотвращает просмотр истории с помощью клавиш со стрелками
  • «History» перестает работать при запуске внутри сценария bash
  • Есть ли способ перечислить последние транзакции графического интерфейса в Linux?
  • Экспорт истории команд в скрипт командной оболочки
  • Преобразование истории в скрипт?
  • Interesting Posts

    Как разрешить общий доступ samba к IP-адресу или имени хоста

    Как получить функцию getopts при вызове другой функции внутри файла

    Как извлечь время из текстового файла в другой текстовый файл / список

    Восстановление от ошибки Grub

    RDP автоматически вводит командную строку

    Shell: Как получить последний аргумент предыдущей команды, когда она была отсоединена?

    разрешать почту только одному адресу только с локального сервера

    cygwin: ls -i сообщает неправильный номер inode для файлов в UNC-пути

    Как / usr / bin / env знает, какую программу использовать?

    Как заставить процессы не умирать после того, как его родительский штамп?

    Могу ли я изменить владельца туннеля после его создания?

    Запрос dhcp для получения IP по MAC

    Вход из файла: «расширенный» (с использованием знака «меньше») или «начинающий»

    Не удалось запустить .py-файл в cgi-bin с помощью ajax-вызова из моего .php-файла

    Мне нужно RDP на сервер через обратный туннель

    Linux и Unix - лучшая ОС в мире.