Может ли один просмотр входа трубопровода в целом трубопровод?

Оказывается, apt-cache search --names-only также ищет Provides. Необходимо обновить страницу man. Вот ссылка на сообщение об ошибке по этому поводу.

Согласно ошибке #98695¹, кажется, что "apt-cache search --names-only" также просматривает поле "Provides", в то время как на странице руководства говорится, что запрашивается только запрашивается только имя пакета.

Я думаю, что страница руководства по apt-cache должна быть обновлена соответствующим образом, чтобы чтобы отразить текущее состояние paremeter.

¹http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=98695

Это было пожеланием, из-за которого поведение apt-cache search было изменено на поиск Provides в дополнение к имени пакета.

0
01.12.2018, 00:37
2 ответа

С конвейером не связаны формальные метаданные или API запросов. помимо того, что можно спасти из дерева процессов с помощью инструментов процесса или копаться в файловых системах типа /proc, если таковые существуют. То родительская оболочка будет (возможно )иметь полный конвейер где-то в память и будет знать различные вовлеченные дочерние процессы, хотя снова нет никакого API, с помощью которого произвольное catиз (бессмысленно, кроме как пример )конвейера cat | cat | cat |...будет знать, какой catон находится в этом конвейере и, следовательно, кто его сверстники.

% cat | cat -b | cat -e | cat -n

более полезен, так как с уникальными флагами человеку будет проще время сказать, что есть что; pstree(1)в другом терминале для пример может показать

 |     \-+= 35276 jhqdoe -zsh (zsh)
 |       |--- 44661 jhqdoe cat -n
 |       |--- 03968 jhqdoe cat -b
 |       |--- 96165 jhqdoe cat -e
 |       \--= 26975 jhqdoe cat

, но это не говорит нам о том, что cat -eподключается к cat -n, только что сумка с кошками принадлежит группе процессов родителя оболочка 35276.

% ps ao ppid,pid,command | grep '[ ]cat'
35276 44661 cat -n
35276 96165 cat -e
35276  3968 cat -b
35276 26975 cat

Если система, в которой вы находитесь, имеет /procили команды для проверки того, какие каналы или дескрипторы pid связаны с тем, что вы можете понять что связано с чем в группе процессов, к которой относится процесс к.Например, в Linux с lsofи аналогичным конвейером cat. команды cat -eи cat -nмогут быть связаны, так как обе они патрубок патрубок 14301040:

-bash-4.2$ lsof -p 23591 | grep pipe
cat     23591 jhqdoe    0r  FIFO    0,9       0t0 14301039 pipe
cat     23591 jhqdoe    1w  FIFO    0,9       0t0 14301040 pipe
-bash-4.2$ lsof -p 23592 | grep pipe
cat     23592 jhqdoe    0r  FIFO    0,9       0t0 14301040 pipe

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

Родительская оболочка, возможно, могла бы предложить средства для перезаписи конвейера после он был введен, хотя функция ловушки ZSH preexecне кажется, предлагают любые средства перезаписи команды для запуска. (Такой функция может быть похожа на то, как макросы LISP позволяют программисту переделывать код. )Родительская оболочка также может предлагать дочерние процессы API. можно было бы использовать для осмотра трубопровода... но такого рода дополнения были бы нужно записать в оболочку.

Однако можно построить сложный трубопровод:

func | ( cd... &&... | (... | awk... ) )

в этом случае ваш funcлибо не сможет найти awkи отреагирует (возможно, )ошибочно, или функция поиска конвейера процесса должна выполнить рекурсию по всем командам следующего элемента конвейера и в в этом случае awkможет быть не связано с funcи не нужно модификация на лету. Или вы можете забыть, что вы установили это поведение и awkмогут быть неправильно изменены, что может привести к трудно -to -найти ошибки...

4
28.01.2020, 02:18

Мне удалось это сделать, по крайней мере, в Linux. Вот скрипт, демонстрирующий это:https://gist.github.com/MatrixManAtYrService/790a4a058bc841b0ceb2eb0263fb5d88

Пример использования:

❯ cat -b |./luigi | jq.
[
  {
    "pid": "20832",
    "name": "cat -b",
    "node": {
      "write": "5157339",
      "read": null
    }
  },
  {
    "pid": "20833",
    "name": "bash./luigi",
    "node": {
      "write": "5157341",
      "read": "5157339"
    }
  },
  {
    "pid": "20834",
    "name": "jq.",
    "node": {
      "write": null,
      "read": "5157341"
    }
  }
]
1
28.01.2020, 02:18

Теги

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