Linux (например, Ubuntu) терминал, есть ли способ получить последнюю строку? Скажем, я случайно набираю td
команду, которая не была установлена в моей системе, поэтому я получу сообщение, как показано ниже. Я хотел бы иметь «ярлык» для sudo apt-get install textdraw
быстрого запуска .
Есть ли такой инструмент или как я могу скопировать последнюю строку в буфер обмена, не используя мышь?
username@WorkStation:~$ td
The program 'td' is currently not installed. You can install it by typing:
sudo apt-get install textdraw
username@WorkStation:~$
sudo apt-get install textdraw
, а неtd
. стрелка вверх даст мне толькоtd
Ответы:
Если вы не возражаете против небольшой непристойности (я не хочу), вы можете использовать черт , инструмент, который делает именно то, что вы просили.
Ну, не совсем, но это решает ту же проблему. Вместо того, чтобы просто получить последнюю строку, он пытается соответствовать последней введенной вами команде.
Примеры, показанные в репозитории, показывают несколько из упомянутых вами сценариев.
источник
Краткий ответ: нет, вероятно, у вас нет доступных методов для этого.
Длинный ответ:
vi
(где вывод не хороший текст с ориентацией на строки). В любом случае, Bash этого не делает.На практике, чтобы обойти это ограничение, люди используют другие программы для захвата вывода команды и его редактирования. Но это не решит вашу непосредственную проблему.
Например, я использую vi-like-emacs для выдачи специальных команд оболочки. Если для них не требуется дополнительного ввода, он хорошо работает для запуска в окне , захвата выходных данных команды и редактирования выходных данных, необходимых для уточнения команды. Emacs также позволяет вам делать что-то подобное, а также vim.
источник
Если вы получили это сообщение в Ubuntu после запуска несуществующей команды из bash, ваша система, вероятно, использует
command_not_found_handle
функцию. Вы можете увидеть это в/etc/bash.bashrc
.Возможен простой взлом: я только что создал скрипт с именем
cnfh
:Затем запустите команду td, используя этот скрипт:
Использование Ubuntu 14.04.2 LTS . Надеюсь, это поможет.
источник
В tmux v2.4 и далее (поскольку этот коммит https://github.com/tmux/tmux/commit/76d6d3641f271be1756e41494960d96714e7ee58 ) с
send-keys -X
. Это может быть возможно в более старых версиях с другим синтаксисом.В
.tmux.conf
:Теперь
prefix+!
скопируем последнюю строку в текущей позиции курсора.cursor-left
может быть пропущен, если вы хотите выполнить его напрямую без ввода return.Примечание : он не будет работать, если последняя строка пуста или обернута, но в большинстве случаев все еще полезна
источник
Чтобы выполнить последнюю строку вывода самой последней команды, если вы хотите повторно выполнить эту команду (поскольку она ничего не делала, кроме выдачи диагностического сообщения), выполните
Шаг за шагом (слой за слоем):
fc
(что может означать «Fix Command») - встроенная команда оболочки для доступа к истории команд.-ln
l
(нижний регистр L) - л ист предыдущая команда (S)n
- не включать команду н umbers1
(один) - относится к самой последней командеfc -ln -1
перечисляет самую последнюю команду, не включая номер команды.$(fc -ln -1)
выполняет самую последнюю команду.$(fc -ln -1) | tail -n 1
выполняет самую последнюю команду и отображает последнюю строку ее вывода. Этоsudo apt-get install textdraw
строка в вашем примере.$($(fc -ln -1) | tail -n 1)
выполняет эту команду.Вы можете псевдоним это:
Я оставляю вам выбирать более короткое имя для псевдонима.
Примечания:
|
,<
,>
,;
,&
, или даже кавычки. Если вам нужно обрабатывать сложные команды, вы можете сделать это, добавивeval
, но это широко не рекомендуется.tail -n 17 | head -n 1
.fc
. Обратите внимание, чтоfc -ln -1
это сокращение отfc -ln -1 -1
. Чтобы получить третью самую последнюю команду, используйтеfc -ln -3 -3
.источник