TL; DR: alias @@='$($(fc -ln -1) |& tail -1)'
Средства взаимодействия с историей Bash не предлагают никакого механизма для проверки вывода команд. Оболочка не хранит это , и расширение истории специально для команд, которые вы сами запускаете, или частей этих команд.
Это оставляет подход повторного запуска последней команды и передачи как stdout, так и stderr ( |&
) в подстановку команд. Ответ Heemayl достигает этого, но не может использоваться в псевдониме, потому что оболочка выполняет расширение истории до расширения псевдонимов, а не после.
Я не могу заставить расширение истории работать в функции оболочки, даже включив его в функцию с помощью set -H
. Я подозреваю, !!
что функция никогда не будет расширена, и я не уверен, что она будет расширена, если бы она была, но сейчас я точно не знаю, почему это не так.
Поэтому, если вы хотите настроить все так, чтобы вы могли делать это с минимальным набором текста, вы должны использовать fc
встроенную оболочку вместо расширения истории, чтобы извлечь последнюю команду из истории. Это имеет дополнительное преимущество, заключающееся в том, что оно работает, даже если расширение истории отключено
Как показано в Гордоном Дэвиссоне «s ответа на создание псевдонима , содержащее расширение истории Баша (на Super User ), $(fc -ln -1)
симулирует !!
. Подключив это в течение !!
в командных heemayl по $(!! |& tail -1)
урожайности:
$($(fc -ln -1) |& tail -1)
Это работает как, $(!! |& tail -1)
но может идти в определении псевдонима:
alias @@='$($(fc -ln -1) |& tail -1)'
После того, как вы запустите это определение или вставите его в .bash_aliases
или .bashrc
и запустите новую оболочку, вы можете просто напечатать @@
(или как бы вы ни назвали псевдоним), чтобы попытаться выполнить последнюю строку вывода из последней команды.
ek@Io:~$ alias @@='$($(fc -ln -1) |& tail -1)'
ek@Io:~$ evolution
The program 'evolution' is currently not installed. You can install it by typing:
sudo apt-get install evolution
ek@Io:~$ @@
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
evolution-common evolution-data-server evolution-data-server-online-accounts
....