Во-первых, нет, вы не можете переместить присваивание типа FILES=blah
в другой процесс, поскольку переменные являются внутренними для оболочки, и хотя экспортированные переменные распространяются вниз к дочерним, нет способа распространить их вверх к родителям и предкам процесса.
Однако вы можете запустить внешнюю команду и выбрать ее вывод в массив. Хотя это не так безопасно в отношении специальных символов в именах файлов, как shell glob, поскольку bash, похоже, не любит '\0'
в качестве разделителя. Если у вас нет файлов с новыми строками, то это должно сработать:
IFS=$'\n' # only split on newlines
FILES=( $(find ...) ) # or
FILES=( $(sudo find ...) )
Однако, если вы создавали список файлов с повышенными привилегиями, вы все равно не сможете получить доступ к файлам в списке. Например, если они находятся в каталоге, к которому у пользователя нет доступа, то даже stat
на них не сработает.
И в любом случае, чтобы сделать все это безопасно, вам нужно иметь очень ограниченный набор разрешенных команд в sudo
(для пользователя, выполняющего скрипт). Иначе ничто не помешает кому-то изменить sudo find
на sudo find -delete
или еще хуже.
Я опубликую, что решило проблему для меня, что является лучшим ответом на этот вопрос здесь:
https://askubuntu.com/questions/398030/change-default-sound-device
Используя это и помощь, предоставленную дирктом , я предпринял следующие шаги::
pacmd list-cards
-это дало моему X -Fi индекс 2.
Настройка профиля была фактически идентична настройке в ответе по ссылке выше, а именно 2 output:analog-stereo
. Затем я ввел следующееpacmd set-card-profile 2 output:analog-stereo
Затем я добавил
set-card-profile 2 output:analog-stereo
set-default-sink 2
до конца/etc/pulse/default.pa
И при перезагрузке по-прежнему был выбран X -Fi, не нужно было вносить никаких изменений в Звук для повторного выбора карты.
alsactl store
должно хранить настройки микшера. Не уверен, что они загружаются при загрузке по умолчанию в Debian, но их можно восстановить с помощью команды alsactl restore
.
Давайте разберемся с различными настройками звука.
Ваше звуковое оборудование управляется драйверами ядра ALSA, библиотека ALSA предоставляет доступ к этим драйверам, и существуют различные элементы управления громкостью/отключением звука, которые можно изменить с помощью alsamixer
или amixer
. . Некоторые из этих настроек также могут быть доступны через Gnome. Я обычно оставляю их в покое и изменяю только если что-то не работает.
Вы можете сохранить и восстановить эти настройки с помощью alsactl store
и alsactl restore
, а пакеты Debian alsa-utils
содержат скрипт, который восстанавливает их из /var/lib/alsa/asound.state
.
Pulseaudio работает поверх ALSA. Вы можете изменить настройки Pulseaudio в pavucontrol
и другими способами. Pulseaudio запоминает некоторые из своих настроек, но нет общего способа их сохранения или восстановления; если вы хотите, чтобы настройки Pulseaudio отображались при загрузке, вам нужно повозиться с настройкой Pulseaudio.
Поскольку я не запускаю рабочий стол Gnome, я не знаю, что на самом деле делает «отключить звуковые оповещения». Это могут быть настройки Gnome, и в этом случае вам нужно выяснить, как восстановить настройки Gnome при загрузке. В базе данных настроек Gnome есть различные утилиты, такие как dconf
и gsettings
, но использование, по-видимому, менялось в разных версиях, и я никогда не мог полностью понять, как все работает.
Итак, если вас в основном интересует «отключение звуковых оповещений», вам нужно разобраться, что именно он делает и что изменяет.
Редактировать:
Таким образом, настройки Звуковых эффектов определенно относятся к Gnome, поэтому вам нужно выяснить, как сделать настройки Gnome постоянными или установить их при загрузке.
alsa-utils
восстанавливает настройки при загрузке, предоставляя сценарии для SysV Init (/etc/init.d/alsa-utils
) и systemd (/lib/systemd/system/ alsa-*
), которые в основном вызывают alsactl restore /var/lib/alsa/asound.stat
). Поэтому, когда вы вызываете alsactl store
от имени root, он запишет текущие настройки в этот файл, и они будут восстановлены при загрузке.
Возможно, что «выбранный» вывод, показанный в меню Gnome, является оболочкой для приемника Pulseaudio по умолчанию. Вы можете установить этот приемник с помощью pacmd set-default-sink
(используйте pacmd list-sist-sinks | grep name:
, чтобы получить список имен приемников), и я думаю, что в pavucontrol
тоже. Pulseaudio запомнит это. Также возможно, что это снова настройка Gnome, которая переопределяет то, что делает Pulseaudio.