Виконувати дві речі з результатом команди


9

У мене є програма, texcountяка виводить кількість слів у моєму документі LaTeX. Я також можу sedподати висновок цього для того, щоб зробити нові рядки TeX рядків і записати це у файл, який потім я можу включити у свій остаточний документ. Але коли я виконую texcount foo.tex | sed s/$/'\\\\'/ > wc.texкомандний рядок, texcountто витісняється.

Як я можу отримати висновок першої команди, який відображатиметься в терміналі і передається в sed?

Відповіді:


9

Ви можете використовувати анонімну трубку для другої команди:

texcount foo.tex | tee >(sed s/$/'\\\\'/ > wc.tex)

Важливою частиною цієї відповіді є використання tee. Якщо у вас є такі снаряди, як Bash, ви можете передавати вихід трійника, використовуючи >(some further commands). В інших оболонках вам доведеться вказати аргументу назви файлу (це його стандартний режим роботи), а потім запустити some further commands < thatfileта видалити цей файл. Або дивіться відповідь Харі нижче.
сумнівним

tee, tee & tee.
bagavadhar

7

Вам потрібна команда «трійник», яка дозволяє розділити труби.

texcount foo.tex | tee >output.txt | sed s/$/'\\\\'/ > wc.tex ; cat output.txt

Це дозволить залишити додатковий файл output.txt. Прочитайте це для отримання додаткової інформації: http://www.unixtutorial.org/2007/12/tee-replicate-standard-output/ Ви також можете зробити "man tee".


texcount foo.tex | tee unmodified |sed s/$/'\\\\'/ > modifiedпоміщає модифіковані та немодифіковані версії виводу у два файли. Як надрукувати немодифіковану версію до терміналу? Я спробував, tee stdoutале це нічого не друкує ...
Seamus

3
Ви не можете цього зробити, тому що tee надсилає свій вклад у stdout та файл. Stdout - це те, що стає входом до sed. Ви можете додати && cat unmodifiedнаприкінці. Це скине немодифікований вихід у термінал.
KeithB

Тут буде відповідний командний рядок texcount foo.tex | tee output.txt | sed s/$/'\\\\'/ > wc.tex ; cat output.txt. Або ви могли використовувати texcount foo.tex | tee output.txt; sed s/$/'\\\\'/ output.txt > wc.tex. У будь-якому випадку ви, мабуть, хочете rm output.txtпізніше.
сумнівний

@dubiousjim Це крапка з комою правильна - труба працює, але напівкрапка краще виражає те, що призначено.
Danny Staple

6

Можна використовувати досить ідіоматичне

texcount foo.tex | tee /dev/tty | sed s/$/'\\\\'/ > wc.tex

/dev/tty - це магічний пристрій, який відноситься до керуючого терміналу поточного процесу.

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