Как называется эта конструкция Bash (и / или другой оболочки?)? - PullRequest
6 голосов
/ 23 декабря 2011

Какая конструкция в bash называется, где вы можете взять команду wrap, которая выводит в stdout, так что сам вывод обрабатывается как поток? В случае, если я не так хорошо это описываю, может быть, пример подойдет лучше всего, и это то, для чего я обычно его использую: применение diff к выводу, который не приходит из файла, но из других команд где

cmd 

упакован как

<(cmd)

Оборачивая команду таким образом, в приведенном ниже примере я определяю, что между двумя командами, которые я выполняю, есть разница, равная единице, и затем я могу определить это одно точное различие. Какова конструкция / метод обертывания команды как <(cmd)? Спасибо </p>

[builder@george v6.5 html]$ git status | egrep modified | awk '{print $3}' | wc -l
51
[builder@george v6.5 html]$ git status | egrep modified | awk '{print $3}' | xargs grep -l 'Ext\.define' | wc -l
50
[builder@george v6.5 html]$ diff <(git status | egrep modified | awk '{print $3}') <(git status | egrep modified | awk '{print $3}' | xargs grep -l 'Ext\.define')
39d38
< javascript/reports/report_initiator.js

ДОПОЛНЕНИЕ Пересмотренная команда, использующая рекомендации по использованию ls-файла git, должна выглядеть следующим образом (не проверено):

diff <(git ls-files -m) <(git ls-files -m | xargs grep -l 'Ext\.define')

Ответы [ 3 ]

6 голосов
/ 23 декабря 2011

Это называется процесс подстановки .

6 голосов
/ 23 декабря 2011

Это называется Process Substitution

1 голос
/ 23 декабря 2011

Это замена процесса, как вам сказали.Я просто хотел бы отметить, что это также работает в другом направлении.Подстановка процесса с помощью> (cmd) позволяет вам взять команду, которая пишет в файл, и вместо этого перенаправить этот вывод в стандартный ввод другой команды.Это очень полезно для вставки чего-либо в конвейер, который принимает выходное имя файла в качестве аргумента.Вы не видите это так часто, потому что почти каждая стандартная команда уже пишет в стандартный вывод, но я часто использовал ее с пользовательскими вещами.Вот надуманный пример:


$ echo "hello world" | tee >(wc)
hello world
      1       2      12
...