Оказывается, apt-cache search --names-only
также ищет Provides
. Необходимо обновить страницу man. Вот ссылка на сообщение об ошибке по этому поводу.
Согласно ошибке #98695¹, кажется, что "apt-cache search --names-only" также просматривает поле "Provides", в то время как на странице руководства говорится, что запрашивается только запрашивается только имя пакета.
Я думаю, что страница руководства по apt-cache должна быть обновлена соответствующим образом, чтобы чтобы отразить текущее состояние paremeter.
Это было пожеланием, из-за которого поведение apt-cache search
было изменено на поиск Provides
в дополнение к имени пакета.
С конвейером не связаны формальные метаданные или 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 -найти ошибки...
Мне удалось это сделать, по крайней мере, в 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"
}
}
]