Я бы сохранил список файлов в массиве , чтобы вам не приходилось дважды читать файловую систему, повышая производительность и уменьшая потенциальные условия гонки. Затем используйте другую переменную в качестве индекса.
files=(*.jpg)
total=${#files[@]}
i=0
for f in "${files[@]}"; do
i=$(( i + 1 ))
echo index $i
echo total $total
echo "- Processing file: $f"
done
files=(*.jpg)
:сохранить глобус в массив$files
total=${#files[@]}
:считать сумму в$total
i=0
:инициализировать $i
на 0. i=$(( i + 1 ))
:прибавляем по 1 к $i
в каждую петлю Это предполагает, что "первая" петля равна 1. В зависимости от вашего мнения, вместо этого вы можете начать с 0.
Я не уверен, но если вы еще не пробовали, попробуйте изменить аргумент biosdevname=0|1 для ядра?
Его значение обычно изменяется в GRUB _CMDLINE _LINUX перед запуском grub2 -mkconfig на ПК, эта часть, конечно, может отличаться в вашей встроенной ситуации.
Мой частичный обходной путь(не идеальное решение )заключается в наличии вспомогательного сценария udev, который просматривает имя устройства ядра, например ttyS5
, и ищет место устройства в устройстве PCI. дерево путем разрешения символической ссылки /sys/class/tty/ttyS5
. Затем он просматривает все другие устройства TTY на том же узле и берет индекс этого устройства среди его одноранговых узлов. Предполагается, что порядок устройств в этом узле стабилен, даже если имена устройств не стабильны.
#!/usr/bin/env python3
import argparse
import os
# Parse arguments
parser = argparse.ArgumentParser()
parser.add_argument("kernel_dev")
args = parser.parse_args()
# Find peer devices of this one
sysfspath = os.path.realpath(f"/sys/class/tty/{args.kernel_dev}")
peer_devices = os.listdir(os.path.dirname(sysfspath))
peer_devices.sort(key=lambda d: (len(d), d)) # natural sort
# Print the index of this device among its peers
print(peer_devices.index(args.kernel_dev) + 1)
Тогда правило udev становится:
... PROGRAM="/usr/bin/serial_device_index %k", SYMLINK+="ttyEXP%c"...
Это решение может потребовать настройки для других конфигураций оборудования.
Это просто создает стабильные имена символических ссылок, а не стабильные имена, которые могут быть полезны для таких вещей, как назначение устройства параметру ядра console
или использование системных служб Ubuntu getty
консоли входа в систему.