Программы, которые взаимодействуют с последовательными устройствами:
picocom
minicom
socat
или из оболочки, вы можете сделать:
stty -speed 19200 < /dev/ttyS0 # sets the speed of the port
exec 99<>/dev/ttyS0 (or /dev/ttyUSB0...etc)
printf "AT\r" >&99
read answer <&99 # this reads just a CR
read answer <&99 # this reads the answer OK
exec 99>&-
Как объяснялось в других ответах и комментариях, причина того, что вы обратите внимание, как Bash
обращается с трубами. Чтобы отфильтровать то, что вы очень хочется в подобных ситуациях можно попробовать заключить первую букву аргумента grep
в []
вот так:
$ strace w 2>&1 | grep random
read(4, "grep\0random\0", 2047) = 12
$ strace w 2>&1 | grep '[r]andom'
$ strace w 2>&1 | grep '[c]lose'
close(3) = 0
close(3) = 0
close(3) = 0
close(3) = 0
close(3) = 0
close(3) = 0
(...)
РЕДАКТИРОВАТЬ:
Как правильно заметил Р. в комментарии ниже на самом деле strace
делает не видеть другую сторону трубы. Аналогично ps aux | grep grep
который также показывает grep grep
в своем выводе w
, проходит через каталог /proc
и находит там процесс grep
.
w отображает информацию о пользователях, находящихся в данный момент на машине, и их процессах
Чтобы отобразить процессы пользователей, программа просматривает все процессы, запущенные на машине. машине, и их процессах
Чтобы отобразить процессы пользователей, программа перебирает все процессы, запущенные на машине. Давайте попробуем это сделать:
$ strace -o w.trace w | grep whatever
Внутри трассировки мы находим такие строки (в системе Linux):
open("/proc/8286/cmdline", O_RDONLY) = 4
read(4, "grep\0whatever\0", 2047) = 14
Что показывает w
, явно проходящий через /proc
и просматривающий командные строки всех процессов (и другие вещи, не показанные). Он находит grep
, который работает параллельно с ним, и это то, что strace
видит, как он делает. Труба не имеет к этому никакого отношения, кроме запуска обоих процессов в одно и то же время. В некотором смысле это похоже на то, как если бы ps | grep
увидел сам grep.
who
и большинство других команд не нуждаются в информации о процессах и не ищут ее, поэтому при трассировке вы не увидите того же самого.