Спасибо всем. Позвольте мне опубликовать один ответ на основе всех вас и, возможно, лучше для меня.
Этот сценарий хорошо работает в bash и dash, не требует подстановки реального файла или процесса в bash , не требует очень медленного вызова внешней программы, даже вам не нужно беспокоиться о какой-либо проблеме выхода в объекты как %s
в C printf , , но вы все равно должны позаботиться об экранировании строк в самой вашей оболочке .
#!/bin/sh
printf '%s\0' "[tag1]
key1=value1
key2=value2
[/tag1]
" "[tag2]
key3=value3
key4=value4
[/tag2]
" | shuf --zero-terminated
#also see man printf(1)
Только дляshuf
(здесь нет намерения обобщать -альтернативный документ):
shuf --echo "[tag1]
key1=value1
key2=value2
[/tag1]" "[tag2]
key3=value3
key4=value4
[/tag2]"
Я использовал com
в прошлом --Подозреваю, что на Solaris (, может быть, даже на SunOS ), и давно. Он используется для настройки различных характеристик связи, таких как скорость, четность, Xon/Xoff, тайм-ауты. Здесь он используется для установки скорости передачи битов -на 115200 бод.
Эквивалентом для Linux является stty
.
Чтобы узнать, что происходит под капотом, более подробные объяснения или просто для лучшего сна:man -s 3 termios
.
Вы смотрите наtinyserial
.
Я определил это с трудом, только из подсказки в вопросе. Постыдно простой способ определить это, который я обнаружил позже, когда пошел смотреть видео, — это просто обратить внимание при просмотре видео; потому что ведущий говорит нам, что это com
из пакета tinyserial
, так как xe вводит в текст «/dev/ttyUSB0
».