Я работаю над сценарием bash, который выполняется в бесконечном цикле продолжительностью в 1 секунду, где, если он обнаруживает, что компьютер подключен к источнику переменного тока, он воспроизводит файл plugin.ogg
с помощью ogg123
, а если нет, подключен, он воспроизводит файл без звука Silence.ogg
. Однако у меня есть несколько вопросов. Во-первых, кажется, что он больше не зацикливается (возможно, это побочный эффект от wait
, который мне пришлось добавить, чтобы избежать зацикливания входного звука зарядного устройства после первого обнаружения. Во-вторых, он не хочет переходить на Каталог /
и поэтому (я не уверен, что из-за ошибки /
или чего-то еще) не может найти файлы для воспроизведения. Пожалуйста, помогите исправить это, спасибо!
#!/bin/bash
"cd /"
while true
do
if on_ac_power; then
"ogg123 plugin.ogg" ## Laptop on power
else
"ogg123 Silence.ogg" ## Laptop on battery
fi
sleep 10 ## wait 10 sec before repeating
done
Выход терминала, если он работает, когда компьютер отключен: /home/brenden_mcfarling_live/Desktop/ac0.sh: line 3: cd /: No such
file or directory
/home/brenden_mcfarling_live/Desktop/ac0.sh: line 10: ogg123
Silence.ogg: command not found
Выход терминала, если он подключен к сети: /home/brenden_mcfarling_live/Desktop/ac0.sh: line 3: cd /: No such file or directory
/home/brenden_mcfarling_live/Desktop/ac0.sh: line 8: ogg123 plugin.ogg: command not found
Любая помощь будет признательна!
Сначала: почему вы меняете каталог на root /? Ваши файлы там находятся?
Удалите символы ".." из вашей команды. Чтобы это выглядело как
ogg123 plugin.ogg
Убедитесь, что вы установили пакет vorbis-tools
# sudo apt -get установить vorbis-tools
Как сказал @JonnyTischbein : удалите кавычки из ваших команд, потому что в противном случае оболочка попытается выполнить буквальную команду "cd /"
, то есть она найдет исполняемый файл с именем "cd /"
и выполнит его , Конечно, его не существует, и вы получите bash: cd /: No such file or directory
.
То же самое относится и к "ogg123 plugin.ogg"
. Он попытается выполнить файл "ogg123 plugin.ogg"
, который также не существует. Учитывая ваши другие сообщения об ошибках, я предполагаю, что файлы * .ogg находятся в /home/brenden_mcfarling_live/Desktop
(а не в /
). Таким образом, после изменения на /
файлы больше не могут быть найдены, и вам нужно указать полный путь.
Сложить вместе:
#!/bin/bash
cd /
while true
do
if on_ac_power; then
## Laptop on power
ogg123 /home/brenden_mcfarling_live/Desktop/plugin.ogg
else
## Laptop on battery
ogg123 /home/brenden_mcfarling_live/Desktop/Silence.ogg
fi
## wait 10 sec before repeating
sleep 10
done
Если путь к звуковому файлу или его имя содержат пробелы, вы можете использовать кавычки , но только вокруг имени файла :
ogg123 "/home/brenden_mcfarling_live/Desk Top/Very silent sound.ogg"
Вы также можете взглянуть на этот вопрос (и его ответ) на Unix & amp; Linux . Там они говорят, как немедленно перехватить событие подключения / отключения сетевого адаптера, чтобы вам не нужно было опрашивать каждые 10 секунд, а вместо этого запускать.
Признаюсь, на первый взгляд это немного сложно, но идея такова:
/etc/udev/rules.d
, которые говорят «при подключении, затем запустите script1.sh« и », когда отключено, затем запустите script2.sh»