среда, 4 августа 2010 г.

Изменение громкости из сценария Bash

Перевод статьи: Change Volume From a Bash Script

24 сентября 2008, Митч Фрэзер (Mitch Frazier)

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

Функция get просто использует amixer для вывода информации о канале управления миксером "Master" и затем использует grep для вырезания нужного значения из выведенной информации.

Функция set также использует amixer для задания громкости. Она использует опцию "cset" программы amixer.

Сценарий следующий:
#!/bin/bash
#

#####################################################################
# Получить текущую громкость.
function get_volume()
{
  mixer=$(amixer get Master | grep 'Front Left:')
  echo $mixer | cut -d ' ' -f 4
}

#####################################################################
# Задать громкость.
function set_volume()
{
  amixer cset iface=MIXER,name="Master Playback Volume" $1 >/dev/null
}

if [[ $(basename $0 .sh) == 'sound' ]]; then
  sound_file=~/Documents/sounds/notify.wav
  if [[ "$1" ]]; then
    sound_file="$1";
  fi

  ovol=$(get_volume)
  echo "Текущая громкость: $ovol"
  aplay $sound_file
  sleep 2

  vol=40
  echo "Воспроизведение на громкости: $vol"
  set_volume $vol
  aplay $sound_file
  sleep 2

  echo "Возвращение к громкости: $ovol"
  set_volume $ovol
  aplay $sound_file
fi

# vim: tabstop=4: shiftwidth=4: noexpandtab:
# kate: tab-width 4; indent-width 4; replace-tabs false;
Если вы сохраните этот сценарий под именем sound.sh и запустите его самого, передав имя звукового файла, сценарий воспроизведёт файл на текущей громкости, затем поднимет громкость и воспроизведёт его снова, и наконец, восстановит громкость и воспроизведёт его последний раз. Если вы откроете средство управления миксером перед запуском сценария, вы должны увидеть как громкость главного канала изменяется под действием сценария. Вы можете изменить значение громкости в строке vol=40 на значение, которое вам нужно.


Митч Фрэзер (Mitch Frazier) является помощником редактора в Linux Journal и веб-редактором в linuxjournal.com.

Скачать весь веб-сайт с помощью wget

Перевод статьи: Downloading an Entire Web Site with wget

05 сентября 2008, Дашамир Хоксха (Dashamir Hoxha)

Если вам когда-нибудь потребуется скачать целый веб-сайт, например для просмотра без доступа в интернет, wget может это сделать -- например:
$ wget \
  --recursive \
  --no-clobber \
  --page-requisites \
  --html-extension \
  --convert-links \
  --restrict-file-names=windows \
  --domains website.org \
  --no-parent \
  www.website.org/tutorials/html/
Эта команда скачает веб-сайт www.website.org/tutorials/html/.

Используются следующие опции:
  • --recursive: скачивать весь веб-сайт.
  • --domains website.org: не переходить по ссылкам вне сайта website.org.
  • --no-parent: не переходить по ссылкам вне каталога tutorials/html/.
  • --page-requisites: собрать все элементы, относящиеся к странице (изображения, CSS и так далее).
  • --html-extension: сохранять файлы с расширением .html.
  • --convert-links: преобразовывать ссылки так, чтобы они работали локально, без доступа в интернет.
  • --restrict-file-names=windows: изменять имена файлов таким образом, чтобы они работали в Windows.
  • --no-clobber: не заменять какие-либо существующие файлы (используется в случае, если скачивание было прервано и возобновлено).

Наслаждайтесь Gawk

Перевод статьи: Fun With Gawk

15 февраля 2010, Джеймс Хайннэнт (James Hinnant)

Когда grep и sed бывает недостаточно, gawk может предоставить дополнительную лошадиную силу, которая вам необходима. Следующий совет содержит образец того, что можно делать с помощью gawk.

Выделить последний столбец из текстового файла, столбцы которого разделены пробелами:
$ cat myfile | gawk '{print $NF}'
или:
$ gawk '{print $NF}' myfile
Вывести количества файлов, которыми владеет каждый из пользователей в текущем каталоге:
$ /bin/ls -l | \
  gawk 'NR > 1 {counts[$3]++;}
END {for (s in counts) {
printf(" %-15s : % 5d\n",
s, counts[s]);}}' | \
  sort
Завершить ваши процессы (одно из применений - завершить зависший сеанс, если вы можете удалённо войти на рабочую станцию с другого компьютера):
$ ps -elf | \
  gawk -v me="$USER" '$3 == me {print $4}' | \
  egrep -v $$ | \
  xargs -i@@ kill -9 @@; kill -9 $$