tee
может перенаправить стандартный ввод данных в стандартный вывод и файл.
echo Hello, World! | tee greeting.txt
Приведенная выше команда отобразит приветствие на экране терминала и сохранит его в содержимом greeting.txt
файла, создав файл, если его нет с таким именем.
Также есть -a
переключатель для tee
добавления в существующий файл вместо перезаписи.
Есть ли удобный способ перенаправить ввод по каналу в команду и стандартный вывод вместо файла?
Я пытаюсь создать скрипт-обертку, buku
чтобы скопировать в основной выбор URL-адрес закладки, указанный ее индексным номером.
# bukuc:
#!/bin/sh
url=$(buku -f 1 -p $1 | cut -f 2) # NUMBER : URL
echo $url # DISPLAY
echo $url | xsel # PRIMARY SELECTION
Здесь я использую echo
два раза, сначала для отображения на терминале, а затем для сохранения в основной выбор (буфер обмена).
Я представляю что-то echo $url | teeC xsel
или ярлык для отображения вывода перед передачей следующей команде (связывание команд), что позволило бы мне объединить всю команду в одну строку без необходимости сохранять результат в переменной следующим образом:
buku -f 1 -p $1 | cut -f 2 | teeC xsel
Я также могу использовать его urlview
для просмотра, выбора и открытия с помощью $BROWSER
следующего:
bukuc 10-20 | urlview
tee /dev/tty
илиtty0
(точно не помню ... я в пути)info tee
упоминает о замене процесса и выводе тройника в программу ...Ответы:
Это просто в оболочках, которые поддерживают замену процессов , например, bash
В противном случае, вы могли бы использовать FIFO (хотя ему не хватает удобства)
источник
sh
(оболочка Bourne) не поддерживает эту функцию; 2. Стрелка должна вставлять как часть единого оператора>()
для подстановки процесса.Прямым аналогом «тройника для команд» является
pee
команда из moreutils (tee
но с конвейерами ). Его аргументы используются как команды для запуска, а не как пути, и они получают входные данные, а не записывают их в файл. Все команды получают стандартный ввод, который вы передалиpee
как свои собственные.Используя
pee
, вы можете получить результат , который вы хотели, рассказав ему работать какxsel
иcat
с входом.Там есть дополнительный
cat
процесс для вывода, который на самом деле не является проблемой для вашего случая использования, но может быть менее идеальным в других случаях. Это работает с любой оболочкой, в отличие от подстановки процессов, но, конечно, для этого требуется дополнительный (возможно, менее распространенный) инструмент.Вы можете дать более сложные команды, цитируя их:
pee "xsel --display :1" cat
. Они работают сsh
, так что вы должны быть осторожны с метасимволами оболочки.источник