Как может Вы разность два конвейера в Bash?

Нет. Ответила информация об ошибке в журнале событий:

В одном пуле приложений IIS разрешено только одно приложение в процессе. Пожалуйста, назначьте приложение '/ LM / W3SVC / 170746742 / ROOT / api' другому пулу приложений IIS.

blockquote>

В вашем сценарии для запуска нескольких виртуальных приложений в одном веб-приложении Azure только одно приложение может работать в модели хостинга как in-process, другие могут быть настроены в файле web.config как out-of-process через Kestrel , как показано ниже, более подробную информацию см. здесь ASP.NET Core Module .

Примечание: hostingModel = " OutOfProcess "



  
    
      
        
      
      
    
  

blockquote>

138
задан Adam Rosenfield 5 December 2008 в 23:30
поделиться

2 ответа

Короткое с 2 tmp файлами (не, что Вы хотите) было бы:

 foo | bar > file1.txt && baz | quux > file2.txt && diff file1.txt file2.txt

С ударом Вы могли бы попробовать хотя:

 diff <(foo | bar) <(baz | quux)

 foo | bar | diff - <(baz | quux)  # or only use process substitution once

2-я версия более ясно напомнит Вам, которые вводят, был который, путем показа
-- /dev/stdin по сравнению с. ++ /dev/fd/63 или что-то, вместо два пронумеровало fds.


Даже именованный канал не появится в файловой системе, по крайней мере, на Ose, где удар может реализовать замену процесса при помощи имен файлов как /dev/fd/63 получить имя файла, которое команда может открыться и читать из на самом деле читать из уже открытого дескриптора файла, которые разбивают набор прежде exec'ing команда. (т.е. использование удара pipe(2) перед ветвлением, и затем dup2 перенаправить от вывода quux к входному дескриптору файла для diff, на fd 63.)

В системе без "волшебного" /dev/fd или /proc/self/fd, удар мог бы использовать именованные каналы для реализации замены процесса, но это будет, по крайней мере, управлять ими само, в отличие от временных файлов, и данные не были бы записаны в файловую систему.

Можно проверить, как удар реализует замену процесса с echo <(true) распечатать имя файла вместо того, чтобы читать из него. Это печатает /dev/fd/63 в типичной системе Linux. Или для получения дополнительной информации о точно, какое использование удара системных вызовов, эта команда в системе Linux проследит системные вызовы дескриптора файла и файл

strace -f -efile,desc,clone,execve bash -c '/bin/true | diff -u - <(/bin/true)'

Без удара Вы могли сделать именованный канал. Использовать - сказать diff считать вход того из STDIN и использовать именованный канал в качестве другого:

mkfifo file1_pipe.txt
foo|bar > file1_pipe.txt && baz | quux | diff file1_pipe.txt - && rm file1_pipe.txt

Обратите внимание, что можно только передать вывод того по каналу к нескольким исходным данным с командой мишени:

ls *.txt | tee /dev/tty txtlist.txt 

Вышеупомянутая команда отображает вывод ls *.txt к терминалу и производит его к текстовому файлу txtlist.txt.

Но с заменой процесса, можно использовать tee подавать те же данные в несколько конвейеров:

cat *.txt | tee >(foo | bar > result1.txt)  >(baz | quux > result2.txt) | foobar
138
ответ дан 23 November 2019 в 23:28
поделиться

В ударе можно использовать подоболочки, для выполнения конвейеров команд индивидуально, путем включения конвейера в круглой скобке. Можно затем снабдить префиксом их <для создания анонимных именованных каналов, которые можно затем передать различному.

Например:

diff <(foo | bar) <(baz | quux)

Анонимными именованными каналами управляет удар, таким образом, они создаются и уничтожаются автоматически (в отличие от временных файлов).

122
ответ дан 23 November 2019 в 23:28
поделиться
Другие вопросы по тегам:

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