Скрипт Bash для Power AC плагин

Я работаю над сценарием 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

Любая помощь будет признательна!

0
задан 10 January 2018 в 20:00

2 ответа

Сначала: почему вы меняете каталог на root /? Ваши файлы там находятся?

Удалите символы ".." из вашей команды. Чтобы это выглядело как

ogg123 plugin.ogg

Убедитесь, что вы установили пакет vorbis-tools

# sudo apt -get установить vorbis-tools

0
ответ дан 10 January 2018 в 20:00
  • 1
    Я сделал это, но никакие изменения в результате: ( – iav-babak 3 June 2012 в 14:14
  • 2
    Я сделал это, но никакие изменения в результате: ( – iav-babak 3 June 2012 в 14:14
  • 3
    Я сделал это, но никакие изменения в результате: ( – iav-babak 3 June 2012 в 14:14
  • 4
    Я сделал это, но никакие изменения в результате: ( – iav-babak 3 June 2012 в 14:14
  • 5
    Я сделал это, но никакие изменения в результате: ( – iav-babak 3 June 2012 в 14:14
  • 6
    Я сделал это, но никакие изменения в результате: ( – iav-babak 3 June 2012 в 14:14

Как сказал @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»
0
ответ дан 10 January 2018 в 20:00

Другие вопросы по тегам:

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