2

Вероятно, вы столкнулись со случаем, когда пакет не был установлен, и система рекомендовала вам установить его, используя apt-get install mypackage .

Я ищу быстрое сочетание клавиш для выполнения этой последней строки. Очевидно, стрелка ВВЕРХ не принесет этого, потому что это была не команда, выполненная вами, а только последняя строка вывода предыдущей выполненной программы.

Любые идеи о том, как получить это поведение в Bash?

2 ответа2

2

Вы можете создать псевдоним xo (назовите его как угодно), который повторно запускает последнюю команду без вывода какого-либо ее вывода, а затем запускает последнюю строку этого вывода в качестве команды.

alias xo='$($(fc -ln -1) |& tail -1)'

Затем, после того как вы попытаетесь запустить myapp и получите команду, которую вы можете использовать для установки mypackage которая предоставляет myapp , вы можете просто набрать xo и нажать Enter, и команда для установки mypackage будет запущена.

Как это работает

$(fc -ln -1) ведет себя как расширение истории !! , !! не работает в определении псевдонима или функции, но fc (и подстановка команд с $( )) работает.

$(fc -ln -1) |& tail -1 перезапускает последнюю команду, передавая ее стандартный вывод и стандартную ошибку в tail -1 , который отбрасывает все, кроме последней строки.

Включение этого во внешнюю команду подстановки приводит к тому, что последняя строка запускается как команда. На нем выполняется разбиение по словам (поскольку все это не заключено в " кавычки»), что вам и нужно.

Источники цитируются

-1

Возможное решение будет $(!! |& tail -1) как сказано в этой теме: https://askubuntu.com/questions/621681/how-can-i-execute-the-last-line-of-output-in-bash/621684

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .