Если вы знакомы с C, C++ или Java, то этот вариант bash
for
-loop тоже покажется вам знакомым. bash
выполняет арифметическую оценку с помощью (( ... ))
, поэтому мы будем использовать его при сравнении значений:
array1=( 1 -2 3 -2 2 -4 )
array2=( -2 -3 4 5 2 -5 )
array3=( )
for (( i=0; i < ${#array1[@]}; ++i )); do
if (( array1[i] < 0 && array2[i] < 0 )); then
array3[$i]=0
elif (( array1[i] > 0 && array2[i] > 0 )); then
array3[$i]=1
else
array3[$i]=2
fi
done
echo "${array3[@]}"
Это также хорошо работает с оболочкой ksh93
, от которой bash
получил многие свои возможности.
Что-то, что проверяет ваш порт, скорее всего, ModemManager, который является частью пакета NetworkManager.
Если в вашей системе не установлен модем (классический или wwan), проще всего удалить ModemManager из вашей системы. Если у вас есть такой модем, то вы можете добавить правило udev, чтобы сообщить ModemManager, что это устройство не является модемом и что ему не следует даже проверять его:
ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", ENV{ID_MM_DEVICE_IGNORE}="1"
где 1234
- производитель идентификатор вашего устройства и 5678
идентификатор продукта (вы можете найти их с помощью lsusb
)
Это решение поможет мне для ModemManager 1.10.0 с--filter-policy=strict
(Ubuntu 18.04)ModemManager -V
Вы можете узнать больше:Общие теги udev
Создайте файл /etc/udev/rules.d/49-stm32.rules
и добавьте его:
# 0483:5740 - STM32 in USB Serial Mode (CN5)
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{ID_MM_DEVICE_IGNORE}="1"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{ID_MM_TTY_BLACKLIST}="1"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{MTP_NO_PROBE}="1"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{ID_MM_PORT_IGNORE}="1"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{ID_MM_TTY_MANUAL_SCAN_ONLY}="1"
После сохранения файла и запуска:sudo udevadm control --reload-rules
и (может и не надо):sudo systemctl restart ModemManager.service
После повторного подключения устройства USB (физически вытащите и вставьте его в порт USB )и наслаждайтесь.
П.С. Это решение для STM32 CDC Virtual Com порта -при необходимости можно изменить теги PID/VID и udev.