Почему команда называется which, а не where?

Потому что s/pattern/replacementничего не делает, если patternне совпадает, а sedпо умолчанию печатает пространство шаблонов. Если вы хотите напечатать только результат замены, добавьте-n(для подавления печати по умолчанию )иp(для печати пространства шаблона после успешной замены):

ps | sed -n -E "s/\s*([[:digit:]]+)\s+.*/\1/p"

Вы можете указать psвыводить только PID, поэтому постобработка не требуется:

ps -opid=

(Это, скорее всего, выведет на один результат меньше, так как psне будет включать процесс sed.)

-6
30.09.2021, 17:38
3 ответа

Этимология дана в ранней версии программы which:

which : tells you which program you get

Только Билл Джой мог бы объяснить вам, почему вопрос заключался в том, «какую программу я получу», а не в том, «откуда эта программа?» (whichзаключалась в том, чтобы определить, какая программа будет использоваться из потенциального набора программ ).

2
01.10.2021, 07:27

Об этом в основном писали в комментариях, но это моя точка зрения.

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

whichопределяет, какой из этих двоичных файлов запущен, путем обхода переменной окружения $PATH:

[root@headdesk ~]# echo $PATH
/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@headdesk ~]#

whichбудет искать в /usr/local/sbin, затем /sbinи так далее.

Например, посмотрите на which vim, который находится на 3-й позиции нашего$PATH:

[root@headdesk ~]# which vim
/bin/vim

Если мы добавим исполняемый файл с более высоким приоритетом пути, мы увидим добавленный исполняемый файл:

[root@headdesk ~]# >/usr/local/sbin/vim; chmod +x /usr/local/sbin/vim
[root@headdesk ~]# which vim
/usr/local/sbin/vim

Если мы хотим увидеть все vimисполняемые файлы на нашем пути, мы можем использовать флаг -a:[root@headdesk ~] #который -vim /бин/вим /usr/bin/vim

Более подробно это описано на справочной странице:

DESCRIPTION

Which takes one or more arguments. For each of its arguments it prints to stdout the full path of the executables that would have been executed when this argument had been entered at the shell prompt. It does this by searching for an executable or script in the directories listed in the environment variable PATH using the same algorithm as bash(1).

1
01.10.2021, 04:06

В дополнение к двум превосходным ответам cutrightjm и Стивена Китта, есть whereisкоманда, которая делает то, что вы говорите.

Из руководства:

whereis - locate the binary, source, and manual page files for a command 
0
13.10.2021, 12:43

Теги

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