Bash: Предоставить построенный массив для работы в качестве списка аргументов?

Что означают MID, PCH, HDMI?

MID - составная аббревиатура с непонятным расширением: это прерывание с сигналом сообщения Регистр идентификатора возможности в наборе микросхем серии C220, который использует ваша машина.

(Вы спросите, как им удалось свести этот громоздкий термин к MID? MSI - это хорошо известная аббревиатура, так что это регистр «MSI ID», или MID С таким же успехом они могли бы назвать его MSIID или MSICID, но я думаю, людям слишком нравится TLA . См. Раздел 17.1.1.25 в Intel 8 / C220 series datasheet .)

В любом случае MID здесь не важен. Важно то, что он привязан к выходам HDMI, которые с точки зрения пользователя являются настоящим устройством вывода звука.

HDMI - это цифровой аудио / видеотранспорт, наиболее часто встречающийся на бытовом развлекательном оборудовании, таком как плееры Blu-ray , но также и на некоторых ПК, особенно на тех, которые предназначены для использования как ] домашние кинотеатры .Поскольку HDMI может передавать как звук, так и видео, он отображается в вашем списке устройств вывода звука. Некоторые люди действительно используют его в качестве специального вывода звука, отправляя HDMI на ЦАП , в то время как видео выводится другим путем, например VGA.

Я не знаю, почему вы видите три выходных тракта HDMI, но это почти наверняка не потому, что ваш компьютер имеет 3 выходных разъема HDMI, или даже возможность таковых. Я не решаюсь даже догадываться, в чем разница между ними, хотя, если вы опубликуете вывод lspci -v , я смогу исследовать задействованные микросхемы и, вероятно, разберусь.

PCH - это то, что вы бы назвали своей настоящей «звуковой картой», хотя на самом деле это не карта в машине. PCH - это название Intel для семейства микросхем, которые включают вывод звука. Поскольку было много поколений PCH, вы часто видите, что за ним следует фрагмент номера детали IC, например PCH C220 , который помогает вам решить, совместим ли данный драйвер с конкретным вариантом семейства PCH на ваша материнская плата.

Какой из них подключен к стандартной розетке цвета мха?

PCH.

0
01.08.2018, 20:48
2 ответа

Как объяснил ilkkachu , ваша проблема заключается в том, что одинарные кавычки не должны быть частью шаблонов и что если вы пишете шаблоны в контексте оболочки, оболочка удалит их.

Тем не менее, похоже, что вы можете обойти необходимость явного считывания шаблонов из вашего файла:

rsync --exclude-from=./list source/ target

С помощью --exclude-from=FILENAME, rsyncбудут считываться шаблоны исключения из именованного FILENAME. Обратите внимание, что при этом в шаблонах не должно быть этих одинарных кавычек.

0
28.01.2020, 02:31

Если файл действительно содержит '/home/*', с кавычками, кавычки будут в значении excludestrв цикле, а затем в аргументе, который вы передаете rsync. В этом случае они не являются частью команды оболочки, а просто частью расширенного значения подстановки команды.

С другой стороны, если вы пишете exclude_String+=(--exclude='/home/*'), теперь кавычки являются частью команды оболочки и удаляются во время обработки этой команды. (С эффектом превращения *обычного персонажа.)

rsyncна самом деле не ожидает и не обрабатывает кавычки как часть шаблона исключения, он просто будет рассматривать их как любой другой символ и будет исключать файлы с именами, содержащими кавычки. Итак, если у вас есть шаблоны исключения в виде данных в каком-то файле, у вас не должно быть там кавычек.

Кроме того, вместо for x in $(cat file)используйте while IFS= read -r line; do...; done < fileили, в данном случае, mapfile -t exclude_String < file. Эта замена команды на catвызывает разделение слов, поэтому у вас не может быть шаблонов исключения, содержащих пробелы. Он также немедленно вызывает подстановку шаблонов, прямо здесь, в списке слов для цикла for. Это не то, что вы хотите.


В общем,то, что вам нужно:

excludes=()
while IFS= read -r line; do 
    excludes+=(--exclude="$line")
done <./list 
rsync "$flags" "${excludes[@]}". "$destination"

С ./list, содержащим только шаблоны для исключения:

/home/*
*.vim*

(Кавычки вокруг "$line"в +=(--exclude="$line")не позволяют оболочке замещать файлы с именем --exclude=somethingв текущем каталоге.)

Хотя в случае rsyncвы могли бы также использовать--exclude-from:

rsync "$flags" --exclude-from=./list. "$destination"

Если вы собираетесь использовать что-то более сложное, чем файл, для загрузки цикла, вы можете использовать подстановку процесса:

while IFS= read -r line; do
    excludes+=(--exclude="$line")
done < <(some command that produces the exclude patterns)

См. также:Почему моя переменная локальна в одном цикле while read, но не в другом похожем цикле?

2
28.01.2020, 02:31

Теги

Похожие вопросы