Получение всего вывода от передачи по каналу входа в cli программу

Когда xargs видит \!\(\*-4.pdf на своем входе, он понимает !(*-4.pdf. Если вы используете xargs, вам нужно произвести ввод, соответствующий его синтаксису ввода, который не похож ни на что другое. Простое добавление обратной косой черты перед пробелами справляется только с пробелами.

В Linux, *BSD и OSX, xargs поддерживает опцию -0, которая указывает ему действовать с записями, разделенными нулевыми байтами без кавычек. hg status -0 выдает записи, разделенные нулевыми байтами. Осталось только адаптировать промежуточную обработку, чтобы справиться с нулями вместо новых строк в качестве разделителей.

С помощью GNU awk или любого другого awk, который поддерживает нулевые байты в качестве разделителей записей (я думаю, что BSD/OSX awk поддерживает), вы можете переключить ваше преобразование на awk.

hg status -0 |
awk -v RS='\0' -v ORS='\0' '/^!/ {print substr($0, 3)}' |
xargs -0 hg remove
1
21.08.2018, 04:56
1 ответ

Вы можете комбинировать все предложения, сделанные в комментариях, например, с здесь строкой , смешанной с:

$ script -c 'python -i <<< "print \"test\""'
Script started, file is typescript
Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> test
>>>
Script done, file is typescript

Это запишет вышеуказанное в файл с именемtypescript:

$ cat typescript
Script started on Tue 21 Aug 2018 12:19:50 AM EDT
Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> test
>>>

Script done on Tue 21 Aug 2018 12:19:50 AM EDT

Описанный выше метод работает следующим образом:

  • script -c'...' - runs the commands in single quotes inскрипт and logs the output to the fileмашинопись`
  • python -i <<< "...."-запускает Python в интерактивном режиме, передавая команду "...."в виде здесь строки
  • "print \"test\""-команда для запуска как здесь строка

машинописный текст с управляющими последовательностями

Если вы обнаружите, что полученный файл typescriptсодержит управляющие последовательности, такие как:

ESC[34mRPMsESC[39;49mESC[0m
ESC[34mRPMs_fpmESC[39;49mESC[0m
ESC[34mansibleESC[39;49mESC[0m

Вы можете использовать less -Rили less -rдля просмотра этих:

$ less -R somefile
RPMs
RPMs_fpm
ansible

Ссылки

3
27.01.2020, 23:23

Теги

Похожие вопросы