Как выполнить выходную строку без замены команды 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 .

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

  • Является ли выход смешанным как это из-за xargs и как я могу его исправить?
  • Как объединить входы xarg с большим количеством аргументов?
  • Передавать аргумент xargs как строку в другую команду с помощью '>'?
  • Странная ошибка «Нет такого файла» с «xargs» и «file»
  • эхом basename под xargs?
  • Внутренний вызов функции с параметрами xargs
  • Утилита, полезная для работы с памятью, возвращает N первых отсортированных значений
  • Xargs с несколькими записями аргументов - используйте аргумент переменной окружения после sh -c '...'
  • 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 по соображениям безопасности).

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