Регулируйте Громкость звука Ubuntu на начальной загрузке

В MySQL нет функции разбиения / разбиения строк, как в PHP или во многих других языках.

Он может разбить строку на разделитель, но не позволяет вам получить доступ к каждому элементу массива почти так же легко. Вы говорите, что заполняете раскрывающийся список в графическом интерфейсе. Будет ли проще использовать язык графического интерфейса, который, скорее всего, имеет более простую в управлении функцию разделения строк?

В настоящее время я не могу придумать, как вернуть каждый элемент в виде строки, но только как вернуть каждое значение в отдельном столбце в возвращенном наборе записей.

Вам нужно будет создать собственную «функцию» в вашем запросе. Дайте мне посмотреть, смогу ли я показать вам пример, а затем дать больше объяснений, чем показано в большинстве хитов, которые я нашел за несколько минут просмотра. ВНИМАНИЕ: поскольку в вашем примере может быть 1, 2, 3 ... n «элементов», вам придется по-настоящему творчески подходить к работе с дубликатами. - Если вы настроили свой запрос на получение четырех элементов из строки, содержащей три значения, третье и четвертое возвращенные значения будут одинаковыми.

Большинство примеров, которые я обнаружил за последние несколько минут, отлично справляются со свободным переключением положительных и отрицательных чисел, а затем оставляют вам попытаться понять, как / почему / когда переключаться с положительного на отрицательный.

Для скольких элементов вы ожидаете получить максимум, используйте это как модель:

SELECT ...,    
SUBSTRING_INDEX(SUBSTRING_INDEX(guid, '.', n), '.', -1) as xxx,
...
FROM my_table

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

Внутренняя часть этой функции (SUBSTRING_INDEX (guid, '.', N)) разбивает строку на '.' разделитель, а затем держится за первые "n" частей. Внешняя часть функции разбивает то, что она хранит в памяти, а затем возвращает последнюю (-1) часть.

Используя эту модель, вы можете намного легче следить за тем, как это работает, и еще лучше помнить, что вы делаете сейчас, когда видите этот код месяцами.

SELECT ...,
SUBSTRING_INDEX(SUBSTRING_INDEX(guid, '.', 1), '.', -1) as guid_1,
SUBSTRING_INDEX(SUBSTRING_INDEX(guid, '.', 2), '.', -1) as guid_2,
SUBSTRING_INDEX(SUBSTRING_INDEX(guid, '.', 3), '.', -1) as guid_3,
SUBSTRING_INDEX(SUBSTRING_INDEX(guid, '.', 4), '.', -1) as guid_4,
SUBSTRING_INDEX(SUBSTRING_INDEX(guid, '.', 5), '.', -1) as guid_5,
...
FROM my_table

Обработка дубликатов в запросе будет очень запутанной. Вот что нужно, чтобы вернуть пустую строку для пятого элемента строки только с четырьмя элементами:

IF(substring_index(SUBSTRING_INDEX(guid, '.', 4), '.', -1) != 
    SUBSTRING_INDEX(SUBSTRING_INDEX(guid, '.', 5), '.', -1), 
    SUBSTRING_INDEX(SUBSTRING_INDEX(guid, '.', 5), '.', -1), 
    '') as guid_5

Вы можете немного упростить это, создав пользовательскую функцию на вашем сервере MySQL, если администратор сервера разрешает это. Я бы создал следующую функцию:

create function MY_SUBSTRING (
  search_string text,
  delimiter_chars varchar(1),
  string_index int
)
RETURNS varchar(128) DETERMINISTIC
BEGIN
    # FIRST ARRAY ELEMENT IS INDEX 1, NOT INDEX 0
    RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(search_string, delimiter_chars, string_index), delimiter_chars, -1);
END $

Это даст вам немного чистого и многократно используемого кода, который сделает этот и другие запросы чище, такие как

SELECT ...,
MY_SUBSTRING(guid, '.', 1) as guid_1,
MY_SUBSTRING(guid, '.', 2) as guid_2,
MY_SUBSTRING(guid, '.', 3) as guid_3,
MY_SUBSTRING(guid, '.', 4) as guid_4,
MY_SUBSTRING(guid, '.', 5) as guid_5,
...
FROM my_table

К сожалению - Я только что увидел, что вы хотели использовать результаты в качестве подзапроса. Это еще один червячный червь, и ему нужен кто-то, у кого есть идея переместить результат из столбцов в строки. По крайней мере, я надеюсь, что это поможет вам лучше понять функцию SUBSTRING_INDEX.

7
задан Rob 5 January 2009 в 23:24
поделиться

6 ответов

Вы могли бы хотеть попытаться добавить что строка к Вашему любить к /etc/rc.local Это не может быть достаточно скоро, хотя, так как rc.local назовут после gdm.

Также отметьте, значение по умолчанию runlevel на Ubuntu равняется 2, не 3. Ваша ссылка в rc3.d, вероятно, не работала просто потому что Вы где не использование runlevel 3. Значение по умолчанию runlevel является установкой/etc/event.d/rc-default

3
ответ дан 7 December 2019 в 10:09
поделиться

Я использовал этот метод для достижения этого прежде, но на Дуге Linux. Теперь, я не слишком знаком с init системой использование Ubuntu, но я предполагаю, что Вы могли попытаться адаптировать это к Ubuntu.

0
ответ дан 7 December 2019 в 10:09
поделиться

Я полагаю, что сценарии запуска Ubuntu уже включают "alsactl восстановление". Необходимо смочь уже выполнить "alsactl хранилище" с объемом набор к 25% и влиять на все будущие перезагрузки.

1
ответ дан 7 December 2019 в 10:09
поделиться

Ах, да, но есть ли в них «хранилище alsactl» при выключении?

1
ответ дан 7 December 2019 в 10:09
поделиться

Что вы можете сделать, так это написать сценарий для уменьшения громкости при выключении компьютера. Примерно так:

#!/bin/sh

amixer -- sset Master playback -40dB

exit 1 

затем запустите этот сценарий при завершении работы.

0
ответ дан 7 December 2019 в 10:09
поделиться

Rob,

Я пытаюсь решить тот же вопрос. Я воспользовался вашей фразой "amixer", приведенной выше, и проделал много работы, изучая уровни выполнения, папки /etc/rc#.d и команду update-rc.d. Это не идеально. Он все еще не запускается при перезагрузке так, как я бы хотел, но это уже начало.

Предложения по его улучшению будут приветствоваться.

И вот мой код ниже.....

sudo echo "#!/bin/bash" > /etc/init.d/lowvol.sh

sudo echo "/usr/bin/amixer -c 0 sset Master,0 35% > /dev/null" >> /etc/init.d/lowvol. sh

sudo chmod +x /etc/init.d/lowvol.sh

sudo chown root:root /etc/init.d/lowvol.sh

sudo update-rc.d lowvol.sh stop 20 0 6 .

1
ответ дан 7 December 2019 в 10:09
поделиться
Другие вопросы по тегам:

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