Я знаю, что ответ OP был решен, однако для тех, кто запускает CentOS из контейнера докеров, в котором отсутствуют как adduser , так и useradd , решение состоит в следующем. установить тень -утилиты(под корень очевидно):
yum install shadow-utils
Ну, я понял. Чтобы получить желаемое поведение (команда -> ответ между uart и bash )я написал что-то вроде этого:
Сторона микроконтроллера:
void UART_help_cmd_handler()
{
// this delay prevents buffer overflow on linux side if bash is too slow
// see "However" section below
__delay_ms(100);
printf("Available commands:\n");
printf("search - starts search and returns device addresses\n");
printf("help - prints this help\n");
// second newline to mark end of transmission
// that cat command can read
printf("\n");
}
**Сторона Баша**
#!/bin/bash
# send-command-read-response.sh
# send command
# (in my case microcontroller needs 0x02 byte to find start of command
$ and 0x03 byte for end of command
echo -ne "\x02${1}\x03" > /dev/ttyUSB0;
# read lines one by one until "" (empty line)
file="/dev/ttyUSB0"
terminator=""
while IFS= read line
do
if [ "$line" = "$terminator" ]; then
break
else
echo "$line"
fi
done <"$file"
Однако:
возможно, проблема "быстрого отклика микроконтроллера" могла бы быть решена, если бы я мог использовать аппаратное управление потоком данных, но я не уверен
Я не могу найти способ как-то обрабатывать тайм-аут в bash (, если микроконтроллер по каким-то причинам не отвечает ).
Наконец
stty
, но я думаю, что для этого требуется слишком много усилий. Я старался избегать приложений C/C++, потому что мне нужно заменить сценарий bash в каком-то большом веб-приложении, которое принимает сценарии bash, но дополнительные двоичные файлы «не приветствуются».