отправить консоль Linux через последовательный порт

Примечание :этот ответ относится к первой версии вопроса.

Сначала определим iс помощью вкладки:

$ i=$'ls -l\tcd ~'

Теперь давайте попробуем ваши команды без, а затем с двойными -кавычками:

$ echo $i | cut -f2
ls -l cd ~
$ echo "$i" | cut -f2
cd ~

Если вы хотите, чтобы cutработало должным образом, вам нужно заключить $iв двойные -кавычки. Без двойных -кавычек оболочка выполняет, среди прочего, разбиение слов , в результате чего табуляция заменяется пробелом. Это препятствует тому, чтобы команда cutработала так, как вы ожидаете.

Выполнение назначения Command не меняет этого:

$ Command=$(echo $i | cut -f2); declare -p Command
declare -- Command="ls -l cd ~"
$ Command=$(echo "$i" | cut -f2); declare -p Command
declare -- Command="cd ~"

Общие комментарии

Вы не предоставили здесь более широкий контекст, но, как правило, пытаться помещать команды в переменные — плохая идея. См. "Я пытаюсь поместить команду в переменную, но сложные случаи всегда терпят неудачу!" .

Отдельно, что касается переменной COMMAND, лучше использовать нижний или смешанный регистр для ваших переменных оболочки. Система использует верхний регистр для своих переменных, и вы не хотите случайно перезаписать одну из них.

0
13.03.2020, 03:37
1 ответ

Самый простой ответ — просто запустить службу терминального входа на последовательном устройстве, как в ответе telcoM. Это не меняет консоли Linux . Перенос консоли Linux на последовательное устройство проще в реализации, но имеет больше побочных -эффектов.

Просто укажите console=ttyS0в командной строке ядра, предоставленной ему загрузчиком начальной загрузки (возможно, GRUB в вашем случае ).

Генератор, предоставленный systemd -, увидит это и автоматически активирует службу serial-getty@ttyS0. Но, кроме того, весь фактический консольный вывод ядра и программ, записывающих в /dev/console, теперь будет поступать на ваш DEC VT320.

К сожалению, VT320 не поддерживает цвет . (У VT340 есть, и только 16 штук.)

Это не повезло, потому что многие программы в настоящее время просто жестко подключают ECMA -48 последовательностей управления цветом, включая те, которые выдают сообщения на /dev/console. Все программы, входящие в пакет systemd, работают так же, пока окружение процесса #1 , которое они посещают и читают,не содержит TERM=dumb. Другие программы принимают другие решения, часто основанные на их собственной среде процесса, а некоторые вообще не принимают решений, основанных на терминальном типе , потому что автор никогда не думал, что вывод программы может быть серийное устройство с настоящим монохромным терминалом.

Таким образом, вы также должны убедиться, что в командной строке ядра указано TERM=dumb, что не является правильным описанием VT320 и крайне неадекватно.

Дополнительная литература

-1
28.04.2021, 23:20

Теги

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