1

Может кто-нибудь объяснить, почему две команды ниже дают разные результаты?

Первый передает вывод who для grep, второй принимает вывод who как перенаправление.

~: who |grep $(tty|cut -c 6-)
my_username tty1         2016-01-22 09:56 (:0)

~: grep $(tty|cut -c 6-) <(who)
my_username pts/5        2016-01-22 11:35 (:0.0)

Использование color=always в качестве опции для grep в обоих случаях дает первое совпадение по tty . Второй соответствует pts/5 как и ожидалось.

Tty | Команда tty | cut -c 6- дает мне (в данном случае) часть pts/5 в /dev/pts/5 .

Я пытался использовать кавычки (и ' и ") вокруг разных частей, но безуспешно.

Теперь я понимаю, что команда who -m дает строку, за которой я следовал, но вопрос о том, почему строки выше отличаются, все еще стоит.

1 ответ1

0

Основное внимание уделяется тому , когда оболочка выполняет инструкцию $(...) .

 echo $(tty)       # answers me for example /dev/pts/xx
 who | echo $(tty) # answers me `not a tty`

Таким образом, в конвейерном процессе текущая версия bash (GNU bash, версия 4.3.11) вызывает другую подоболочку.
Вы можете прочитать больше в Bash Guide для начинающих [ 1 ], [ 2 ].

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .