`трійник 'для команд


15

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

3
Спробуйте tee /dev/ttyабо tty0(не пам’ятайте точно ... я в дорозі)
Джордж Василіу

2
info teeзгадує процес заміни та вихід трійника на програму ...
Xen2050

Відповіді:


19

Це оболонки прямо, що підтримують процес заміщення , наприклад, bash

$ echo foo | tee >(xsel)
foo
$ xsel -o
foo

В іншому випадку ви можете використовувати FIFO (хоча йому не вистачає зручності)

$ mkfifo _myfifo
$ xsel < _myfifo &
$ echo bar | tee _myfifo
bar
$ xsel -o
bar
[1] + Done                       xsel 0<_myfifo
$ 

Спасибі! Дві речі, які я зазначив: 1. sh(оболонка Борна) не підтримує цю функцію; 2. Стрілка повинна стирчати як частина єдиного оператора >()для заміни процесу.

11

Прямим аналогом "трійки для команд" є peeкоманда з moreutils ( teeале з трубами). Його аргументи використовуються як команди для запуску, а не як контури, і вони отримують вхід, який їм передається, а не записують у файл. Усім командам надається стандартний вхід, на який ви записані, peeяк власний.

Використовуючи pee, ви можете отримати бажаний результат, запропонувавши йому працювати xselі catвхід, і вхід.

echo foo | pee xsel cat

Там catпропливає додатковий процес, щоб зробити висновок, що насправді не є проблемою для вашого використання, але в інших випадках може бути менш ідеальним. Це працює з будь-якою оболонкою, на відміну від підстановки процесу, але, звичайно, для цього потрібен додатковий (можливо, менш поширений) інструмент.

Ви можете дати більш складні команди, цитуючи їх: pee "xsel --display :1" cat. Вони запущені sh, тому вам доведеться бути обережними щодо метахарактерів оболонок.


4
Дуже круто - не знав про це
steeldriver

2
Це ... не добре ім’я.
Девід Річербі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.