Проблема решена.
Я установил пакет pavucontrol из pulseaudio и использую эту конфигурацию:
options snd_hda_intel index=0
options snd_hda_codec_hdmi index=1
options snd_hda_intel index=2
options snd_hda_codec_hdmi index=-2
alias snd-card-0 snd-hda-intel
alias sound-slot-0 snd-hda-intel
alias sound-slot-0 snd-card-0
Теперь мои звуковые карты обнаруживаются в правильном порядке: mountain-view # cat / proc / asound / карты
0 [PCH ]: HDA-Intel - HDA Intel PCH
HDA Intel PCH at 0xf7418000 irq 64
1 [Adapter ]: USB-Audio - Dell 4-in-1 Adapter
DisplayLink Dell 4-in-1 Adapter at usb-0000:00:14.0-1.1, super speed
2 [HDMI ]: HDA-Intel - HDA Intel HDMI
HDA Intel HDMI at 0xf741c000 irq 66
mountain-view#
Затем с помощью графического интерфейса pavucontrol я отключил карту HDMI, которая использует порт дисплея моего ПК.
${i##*/}
Это работает в оболочках Posix, включая bash
, dash
, ksh
, zsh
и т. д. Из стандартного раздела расширения параметров POSIX спецификации Posix Shell & Utilities :
${parameter##[word]}
Remove Largest Prefix Pattern. The word shall be expanded to produce a pattern. The parameter expansion shall then result in parameter, with the largest portion of the prefix matched by the pattern deleted.
Альтернативно и традиционно для этой цели использовалась команда basename
. Внимание:Производительность может стать серьезной проблемой, поскольку basename
реализован как внешняя команда (, например,/usr/bin/basename
). Поскольку вы выполняете это внутри цикла, вы будете вызывать внешнюю команду для каждого файла. В списке из 1000 файлов это может быть разница между 0,05 секунды (расширением параметра )и 2,0 секундами(basename
команды ). Но для списка из 10 000 файлов это может быть разница между 0,5 секундами (расширения )и 20 секундами(basename
). Разница в производительности становится более резкой по мере увеличения количества файлов.
Для удобочитаемости и производительности вы можете реализовать собственную basename
функцию, например:
mybasename() { echo "${1##*/}"; }
(Выбор лучшего имени для функции и/или реализация полного basename
интерфейса командной строки оставлены читателю в качестве упражнения.:)
Вы можете поместить путь в переменную и использовать его длину -для получения только нужной подстроки из полного имени пути, например:
$ pth="/source/path/";
$ for i in $path*.pdf; do \
ln -s "$i"./"${i:${#pth}}"; \
done