Как выполнить выходную строку без замены команды bash?

Как выполнить выходную строку без замены команды bash?

Например, если я tshark терминал tshark и программа еще не установлена, я получу сообщение об ошибке, например:

 _some text_ sudo apt-get install tshark 

Теперь я хочу выполнить эту последнюю строку без копирования и вставки или транскрипции.

Если я попробую

 $ tshark 2> >(tail -1) sudo apt-get install tshark 

Я получу последнюю строку, которую хочу выполнить.

И если я хочу выполнить эту строку, то, конечно, подстановка команды bash работает и устанавливает все правильно:

 $ $(tshark 2> >(tail -1)) 

Но если я не использую подстановку команд bash и не связываю это с xargs как

 $ tshark 2> >(tail -1) | xargs sudo apt-get install tshark 

Мне интересно, почему трубопровод для xargs, кажется, не имеет никакого эффекта.

Но если я попробую

 $ tshark 2> >(tail -1) | xargs xargs 

sudo подскажет мне правильный пароль, а не apt-get abbort после Y / N для установки или нет.

Тот же результат возникает, если я подключаюсь к bash .

Любой ответ или подсказка приветствуются.

2 Solutions collect form web for “Как выполнить выходную строку без замены команды bash?”

Ответ

Вы не можете повторно использовать вывод команды, которая не была явно записана (трубы и т. Д.), Если вы не выполните повторную команду и не зафиксируете результат самостоятельно.

Bash не сохраняет вывод команд в любых переменных, в отличие от того, как он хранит коды выхода команд и историю команд. У вашего терминала есть выход, и bash не беспокоится о сохранении копии для себя.

Поэтому, если вы хотите избежать подстановки команд вместе, я собираюсь заключить, что вы не можете добраться туда отсюда.

Опции

Если реальный вопрос: «Как я могу легко получить вывод, который я вижу в строке выше в терминале, и пощелкать его в командной строке в виде команды без большого набора текста?» вы можете решить это несколькими способами.

  1. Используйте быстрые клавиши readline чтобы сделать команду более безболезненной.

Например, ваш ответ на тонкое предложение @ choroba в другом месте заключается в том, что для редактирования последней команды слишком много ввода. Ярлыки readline CTRL-a и CTRL-e могут сделать редактирование последней команды (достигнутой с CTRL-p вместо UP waaaay справа) намного быстрее.

  1. Используйте терминальный мультиплексор, такой как screen или tmux . Я предпочитаю tumx . Копирование и вставка довольно безболезненны с помощью простого CTRL- CTRL- [ для перехода в режим копирования и еще нескольких клавиш VI, и вы просто скопировали строку, которую хотите прямо в следующее приглашение (с настройкой tmux с помощью CTRL- лидера ключ.

Надеюсь, это предложит некоторые другие перспективы.

xargs выполняет команду, xargs в аргументах, считанных со стандартного ввода. Если команда не указана, она использует echo .

С xargs xargs первые xargs считывают команды и запускают

 xargs sudo apt-get install tshark 

но нет больше stdin, поэтому больше аргументов не добавляется. Но, поскольку нет никакого stdin, нет также ответов на интерактивные вопросы – они читают от stdin, который связан с трубой, теперь исчерпан. Вы можете попробовать запустить apt-get с помощью --yes . (Запрос пароля работает, поскольку пароли не считываются из stdin по соображениям безопасности).

  • Почему «find / -name» * .txt '| cp / junk "не работает?
  • Как заставить xargs играть хорошо с stdin?
  • / usr / bin / awk: слишком длинный список аргументов
  • поиск имен папок на основе списка, содержащегося в файле .txt
  • команда после команды grep не работает
  • Нет такой ошибки файла или каталога при использовании xargs
  • Удалите файлы, которые предоставляются по каналу
  • Linux: найдет | xargs grep имеют ограничения?
  • Отменить все переменные ENV, соответствующие _PROXY
  • Как рассказать xargs, какой аргумент выбрать?
  • Как выполнить xargs grep для вывода grep с пробелами?
  • Linux и Unix - лучшая ОС в мире.