Создать правило udev
, которое запускает сценарий, когда адаптер переменного тока подключен и отключен:
/etc/udev/rules.d/powersave.rules
SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/path/to/your/script true"
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/path/to/your/script false"
Есть две проблемы.
Первый - порядок, второй - / dev / tty
.
Давайте воспользуемся этим сценарием в качестве примера сценария, из которого мы хотим получить вывод:
test.sh
:
#!/bin/bash
echo dada
echo edada 1>&2
echo ttdada >/dev/tty
Теперь давайте посмотрим на вывод команд:
./ testmyscript.sh 2 > & 1> / dev / null
:
edada
ttdada
Поскольку порядок оценки - слева направо, мы сначала получаем «перенаправить stderr
туда, куда stdout
выводит (так , вывод консоли) ". Затем мы получаем «перенаправление stdout
на / dev / null
. В итоге мы получаем такую ситуацию:
stdout
-> / dev / null
stderr
-> console
Итак, мы все правильно поняли:
./ testmyscript.sh> / dev / null 2> & 1
И мы получаем:
ttdada
.
] Теперь мы выполняем «Перенаправить stdout
на / dev / null
», а затем «Перенаправить stderr туда, куда указывает stdout» (так, / dev / null
). Ура!
Однако у нас все еще есть проблема; программа печатает на / dev / tty
. Теперь я не знаю, как исправить такое поведение, поэтому вы, скорее всего, собираетесь требуется скрипт
, но, надеюсь, такое поведение будет происходить не слишком часто.
Синтаксис, который вы использовали, неверен.
cmd &2>1 >file
будет разделена как
cmd &
2>1 >file
Это будет:
cmd
в качестве фонового задания без перенаправленийstderr
в файл с буквальным названием 1
и перенаправит stdout
в файл
Синтаксис, который вам нужен:
cmd >file 2>&1
Порядок операций важен. Это будет:
stdout
в файл
stderr
в &1
- т.е. в тот же файл, что и stdout
В результате оба stderr
и stdout
будут перенаправлены в файл
.
В bash
, более простой нестандартный (и поэтому я не рекомендую его, по соображениям переносимости) синтаксис cmd &> file
делает то же самое.