Похоже, это должно работать, за исключением того, что вывод lsusb
содержит двоеточие после номера устройства:
$ lsusb -d 1d6b:0002
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Таким образом, переменная devis
будет содержать это, и в конечном результате вы попытаетесь получить доступ к /dev/bus/usb/001/001:
с двоеточием.
Вы можете избавиться от завершающего двоеточия с суффиксом -, удалив расширение, например:
devis=${devis%:}
Другой способ сделать это только в оболочке (безawk
)— просто read
вывести lsusb
. Это берет только первую строку выходов lsusb
, их может быть больше, если есть более одного совпадающего устройства.
В оболочках с заменой процесса:
read x buss x devis x < <(lsusb -d 04f9:0272)
devis=${devis%:}
chmod +w "/dev/bus/usb/$buss/$devis"
Или с трубой:
lsusb -d 04f9:0272 | {
read x buss x devis x
devis=${devis%:}
chmod +w "/dev/bus/usb/$buss/$devis"
}
Используйтеawk
:
awk -F',' '!seen[$1,$2]++' file1 file2
Пояснение:
$1,$2
не назначен, поэтому ложно. !seen
истинно, поэтому мы увеличиваем его (, делаем его истинным )и выполняем действие по умолчанию, которое равно print
. !seen
неверно, и awk
пропустит эту строку.