Чтобы изменить переменную readline только для определенной функции завершения, можно установить переменную readline во время выполнения функции, а затем $PROMPT_COMMAND
изменить ее обратно.
_foo_complete() {
# retrieve the original value
local width=$(bind -v | sed -n 's/^set completion-display-width //p')
if [[ $width -ne 0 ]]; then
# change the readline variable
bind "set completion-display-width 0"
# set up PROMPT_COMMAND to reset itself to its current value
PROMPT_COMMAND="PROMPT_COMMAND=$(printf %q "$PROMPT_COMMAND")"
# set up PROMPT_COMMAND to reset the readline variable
PROMPT_COMMAND+="; bind 'set completion-display-width $width'"
fi
# whatever the function normally does follows
COMPREPLY=(aa bb)
}
complete -F _foo_complete foo
Вы можете сделать это с помощью команды lsblk
.
lsblk -l -o name,tran
дает
NAME TRAN
sda sata
sda1
sdb usb
sdc usb
sr0 sata
-l
означает формат списка, поэтому его легче анализировать. В противном случае вы получите такой древовидный формат:
NAME TRAN
sda sata
└─sda1
sdb usb
sr0 sata
Указание других флагов даст вам больше информации, такой как FSTYPE, LABEL, UUID, MOUNTPOINT и многое другое, просто запустите lsblk --help
, чтобы просмотреть все параметры.
Вы можете использовать флаги --paths --noheadings --scsi
, чтобы вывод выводился следующим образом:
sata /dev/sda
usb /dev/sdb
usb /dev/sdc
sata /dev/sr0
, а затем grep
над входом, чтобы отфильтровать эти строки с usb в начале строки.
Выполните lsusb
, это дает имя устройств, подключенных через шину USB.
Как в:
$ lsusb
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0421:0802 Nokia Mobile Phones CA-42 Phone Parent
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
См. также man lsusb
Описание
lsusb — это утилита для отображения информации о шинах USB в системы и подключенных к ней устройств.