Автор Тема: Скрипты  (Прочитано 8691 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ludoed

  • Местный
  • *****
  • Автор темы
  • Сообщений: 861
  • ludoed1970@jabber.ru
Скрипты
« : Ноябрь 14, 2011, 19:37:46 »
Давно порывался создать подобную тему.
Не уверен, в какой раздел ее правильнее расположить, пока поместил в общие вопросы, а уважаемые модераторы могут переместить ее по своему усмотрению

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


Себя я талантливым bash-программистом не считаю, и свои простейшие скрипты выкладываю исключительно в надежде развести более грамотных пользователей "на поделиться своими наработками"
 ;D

Для большей эффективности предлагаю следующие правила:
1. Скрипт выкладывать с минимальным, но внятным описанием - что он делает
2. Текст скрипта прятать под спойлер
3. Если скрипт вызывается с параметрами - в закомментированных строчках в начале скрипта указывать формат вызова
4. Подробные комментарии на каждую строку не обязательны, но приветствуются

Тематика скриптов может быть любая.
И, для начинающих, не забываем сделать файл скрипта исполняемым, например, командой
chmod 777 <имя файла скрипта>
Итак, для затравки:
Скрипт для скачивания журнала OpenSource

#!/bin/bash
# Скрипт для скачивания журнала opensource
# вызов ./opensource.sh <с какого номера> <по какой номер>
START=$1
LIMIT=$2
for ((a=START; a<=LIMIT ; a++))
do
sleep 5
wget http://osa.samag.ru/get/OpenSource0$a.zip
done


Простейший скриптик, открывающий заданное количество страниц сайта nnm.ru, начиная с 2-й (там на индексе обычно от 4 до 6 страниц, открывать вручную лень  ;) ) Первая страница обычно открывается вручную, смотрю сколько всего страниц, и последующие открываю скриптом  :D


#!/bin/bash
# Вызов: ./firefox_nnm.sh <количество страниц, например, 5>
LIMIT=$1
for ((a=2; a<=LIMIT ; a++))
do
sleep 2
firefox http://nnm.ru/page$a
done


Еще простейший скриптик, позволяющий конвертировать сериал в формате mkv в формат avi для просмотра на телевизоре / плеере с помощью ffmpeg. Исходные файлы должны быть предварительно переименованы: 1.mkv, 2.mkv ... Переименование делаю через krename


#!/bin/bash
# вызов: ./mkv-avi.sh <номер первой серии> <номер последней серии> <битрейт видео>
LIMIT=$2
START=$1
BITRATE=$3
date
for ((a=START; a<=LIMIT ; a++))
do

ffmpeg -i /<путь к исходному файлу>/$a.mkv -map 0.0 -map 0.1 -threads 2 -aspect 16:9 -y -er 3 -acodec libmp3lame -ab 128k -ar 48000 -ac 2 -b $3k -vcodec libxvid /<путь к выходному файлу>/$a.avi && sleep 3; done

Файлы удобно складывать в одни и те же каталоги, чтобы не править каждый раз пути

Как видим, во всех скриптах используется вызов целевой команды в простейшем цикле с указанием некоторых параметров. (Типа, старый дурак выучил, как написать цикл в bash и решил на этом пропиариться  ;D ) Знаю, знаю, что вы подумали, но для новичков может стать откровением, как много задач можно решить элементарным циклом

И еще одна рекомендация:
Всем известно, что в терминале стрелкой вверх можно вызвать предыдущую команду. Но если история разрослась, можно создать в домашнем каталоге скрытый текстовый файлик с названием .inputrc и вписать в него 2 строчки:
"\e[A":history-search-backward
"\e[B":history-search-forward
после чего перелогиниться

Теперь если ввести первые буквы желаемой команды, например sud, и затем стрелку вверх, то терминал будет предлагать только команды, начинавшиеся с указанных букв, в примере - sudo ...

Еще раз приглашаю всех делиться результатами своих экспериментов в консоли
Конструктивная критика и дельные советы приветствуются
все юниксы очень дружелюбны.. они просто очень разборчивы в друзьях ;)

Настоящее труЪ: самописное ядро, выращенные на кухне кристаллы и программирование перемычками :)

Оффлайн vmf

  • Местный
  • *****
  • Сообщений: 587
  • vmf000@yabber.ru
Re: Скрипты
« Ответ #1 : Ноябрь 14, 2011, 23:38:02 »
Поддерживаю.
Тема будет весьма полезна (при соответствующем наполнении)

Жизненный пример по теме: Дети сидят "в контакте", грузят туда фотографии. Фотки *.jpg грузятся, а *.JPG нет. А фотоаппарат, как на зло, делает JPG. Одну-две переименовать - нет проблем, а если десяток - "папа, что делать?"
Скриптик в помощь: ПоказатьСкрыть

#!/bin/bash
for file in $(ls -1 *.JPG); do
 mv $file ${file/JPG/jpg}
done



Пользователь решил продолжить мысль: [time]Ноябрь 15, 2011, 00:05:01 [/time]
Еще простейший скриптик, позволяющий конвертировать сериал в формате mkv в формат avi для просмотра на телевизоре / плеере с помощью ffmpeg. Исходные файлы должны быть предварительно переименованы: 1.mkv, 2.mkv ... Переименование делаю через krename

Вариант скрипта для данной задачи, не требующий переименования

#!/bin/bash
#первый параметр - качество
#второй (необязательно) путь к папке с файлами
if [ "$2" == "" ]; then dir=$(pwd); else dir="${2}"; fi
for file in $(ls -1 $dir/*.mkv); do
 if [ ! -e ${file/mkv/avi} ]; then
  ffmpeg -i $file -map 0.0 -map 0.1 -threads 2 -aspect 16:9 -y -er 3 -acodec libmp3lame -ab 128k -ar 48000 -ac 2 -b $1k -vcodec libxvid ${file/mkv/avi} && sleep 3
 fi
done
« Последнее редактирование: Ноябрь 15, 2011, 00:06:43 от vmf »

Оффлайн ludoed

  • Местный
  • *****
  • Автор темы
  • Сообщений: 861
  • ludoed1970@jabber.ru
Re: Скрипты
« Ответ #2 : Ноябрь 15, 2011, 19:07:03 »
Vmf

Спасибо за поддержку моего скромного начинания, Ваш скрипт для конвертации весьма заинтересовал
Пара замечаний - он у Вас конвертирует в тот же каталог, где лежат исходные файлы? И берет все файлы mkv, которые найдет в текущем каталоге?

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

Мой скрипт затачивался под "многовинтовую" машину, где исходный файл лежит на одном физическом HDD, а результирующий записывается на другой HDD - так быстрее, экономится время на дёргание головкой.

А вот цикл перебора по файлам очень интересен, спасибо!

Леди и джентльмены, прошу вас, не стесняйтесь выкладывать результаты своих экспериментов в консоли!
все юниксы очень дружелюбны.. они просто очень разборчивы в друзьях ;)

Настоящее труЪ: самописное ядро, выращенные на кухне кристаллы и программирование перемычками :)

Оффлайн vmf

  • Местный
  • *****
  • Сообщений: 587
  • vmf000@yabber.ru
Re: Скрипты
« Ответ #3 : Ноябрь 15, 2011, 20:39:44 »
Пара замечаний - он у Вас конвертирует в тот же каталог, где лежат исходные файлы? И берет все файлы mkv, которые найдет в текущем каталоге?
Да, при этом проверяется наличие такого-же файла, но avi (что бы исключить повторную конвертацию)

Цитировать (выделенное)
Об этом стоит предупредить пользователей, так как если в исходном каталоге лежат вперемешку документальные, художественные фильмы и мультики - как обычно при закачке, они все будут порипаны с одним и тем же битрейтом, что не есть гуд
В варианте с переименованием такого не произойдет, хотя и нужны лишние телодвижения.
Мой скрипт затачивался под "многовинтовую" машину, где исходный файл лежит на одном физическом HDD, а результирующий записывается на другой HDD - так быстрее, экономится время на дёргание головкой.
Наложение допольнительных уловий усложняет дело...
Совместными усилиями можно сворганить идеальный скрипт :)

еще одна модификация: ПоказатьСкрыть

#!/bin/bash
#первый параметр - качество
#второй - путь к папке с исходными файлами (необязательно)
#третий - путь, куда складывать результаты (если не задан - совпадает с источником)
if [ "$2" == "" ]; then from=$(pwd); else from="${2}"; fi
if [ "$3" == "" ]; then to="$from"; else to="${3}"; fi
cd "$from"
for file in $(ls -1 *.mkv); do
 if [ ! -e "$to/${file/mkv/avi}" ]; then
  ffmpeg -i "$from/$file" -map 0.0 -map 0.1 -threads 2 -aspect 16:9 -y -er 3 -acodec libmp3lame -ab 128k -ar 48000 -ac 2 -b $1k -vcodec libxvid "$to/${file/mkv/avi}" && sleep 3
 fi
done


Пользователь решил продолжить мысль: [time]Ноябрь 15, 2011, 20:52:09 [/time]
Когда я не знал о существовании "nautilus-image-converter", для некоторых преобразований изображений быт написан следующий скрипт:

преобразование изображений: ПоказатьСкрыть
#!/bin/sh
prefix="new_"
res=`zenity --list --title "Преобразование изображений" --height 280 --width 285 --radiolist
--text "Выберите вариант преобразования:"
--column " " --column " " --column " " --print-column 3
FALSE "Сжать до  " "640 точек"
TRUE "Сжать до  " "320 точек"
FALSE "Сжать до  " "160 точек"
FALSE "Повернуть на " "90 ˚"
FALSE "Повернуть на " "270 ˚"
FALSE "Повернуть на " "180 ˚"`
if [ "$res" = "" ]; then exit 0; fi
for arg
do
 case "$res" in
  "90 ˚" | "270 ˚" | "180 ˚" )
   convert "$arg" -rotate $res "$prefix$arg"
   ;;
  *)
   convert "$arg" -resize $res "$prefix$arg"
   ;;
  esac
done

Для работы скрипта в системе должны быть установлены пакеты: "zenity" и "imagemagic"
Для удобства использования скрипт нужно положить в ~/.gnome2/nautilus-scripts, тогда можно производить манипуляции с файлами через контекстное меню ПКМ (по одному или оптом)
Если использовать скрипт сам по себе, в качестве аргументов нужно передать имена файлов изображений (любое количество через пробел)
Исходные файлы не удаляются, результы создаются с префиксом "new_"



Пользователь решил продолжить мысль: Ноябрь 15, 2011, 21:16:28


Еще один скрипт для nautilus-scripts:

перекодировка текстровых файлов: ПоказатьСкрыть
#!/bin/bash
cod=`zenity --list --width=290 --height=300 --title "Направление кодировки" --text=" " --radiolist --column " " --column " " \
FALSE "cp866 > koi8-r" \
TRUE "cp1251 > koi8-r" \
FALSE "koi8-r > cp866" \
FALSE "koi8-r > cp1251" \
FALSE "cp866 > cp1251" \
FALSE "cp1251 > cp866" \
FALSE "other" `

if [[ "other" == "$cod" ]]
 then
  pages=`iconv -l`
  a=$IFS
  IFS="/"
  cps=","
  p=" "
  for d in $pages ; do IFS=$a ; cps="$cps,$d" ; done
  d=${cps//,,/ FALSE }
  a=${d//, / FALSE }
  cps=${a//,//}
  zenity --info --text="$cps"
  cpin=`zenity --height=300 --list --text "Выбор исходной кодировки" --radiolist --column " " --column " " $cps`
  cpout=`zenity --height=300 --list --text "Выбор новой кодировки" --radiolist --column " " --column " " $cps`
 else
  a=$IFS
  IFS=">"
  cpin="---"
  for d in $cod
  do
   if [[ "$cpin" == "---" ]]
     then
      cpin=$d
     else
      cpout=$d
   fi
   IFS=$a
  done
fi

if [[ "$cpin" != "$cpout" ]]
 then
  for arg
   do
    mv "$arg" "$arg.bak"
    cat "$arg.bak" | iconv -f $cpin -t $cpout -o "$arg"
  done
fi

Рекомендации такие-же, как и для предыдущего скрипта.
« Последнее редактирование: Ноябрь 15, 2011, 21:16:28 от vmf »

Оффлайн ludoed

  • Местный
  • *****
  • Автор темы
  • Сообщений: 861
  • ludoed1970@jabber.ru
Re: Скрипты
« Ответ #4 : Ноябрь 15, 2011, 22:20:40 »
O, ya-ya! Zenity! Das ist fantastish!
Давно на нее рашпиль точу, да все никак не подобрать достойную задачу для приложения сил  :D
А вот положение скриптов в nautilus-scripts - идея хорошая, надо ее развить.
Насчет перекодировки понравилось, может пригодиться
все юниксы очень дружелюбны.. они просто очень разборчивы в друзьях ;)

Настоящее труЪ: самописное ядро, выращенные на кухне кристаллы и программирование перемычками :)

Оффлайн NIN

  • Новичок
  • **
  • Сообщений: 59
Re: Скрипты
« Ответ #5 : Август 03, 2016, 01:31:33 »
Сделал хоткей Win+M для Openbox, со строчкой sh -c "if pgrep mpg321; then pkill mpg321; else mpg321 -o pulse -g10 http://nashe1.hostingradio.ru/rock-128.mp3; fi"

Задачка: сделать "трёхпрограммное" онлайн-радио, управляемое горячей клавишей, как описано выше (например, Win+M).
При последовательном нажатии хоткея, станции переключаются по очереди, затем радио выключается полностью.

Весьма полезное обсуждение - Проблема при воспроизведении MP3, FLAC в консоли
Программа для воспроизведения - mpg321.

Адреса радиостанций в примере (переменные st1, st2, st3):
Станция 1 - "Rock FM" - http://nashe1.hostingradio.ru/rock-128.mp3
Станция 2 - "Наше радио" - http://nashe1.hostingradio.ru/nashe-128.mp3
Станция 3 - "Radio Exteme" - http://listen.radioextreme.ru/stream1
Намеренно использую непопулярные варианты, чтобы был простор для доработки  :)

Небольшие сложности: станция №3 не воспроизводится mpg321 - появляется ошибка "http_open: 200 contains no Content-Type header", поэтому помогать её слушать будет wget. Предусмотрим внезапное отключение интернета, указав необходимые параметры, чтобы поведение было одинаковым (mpg321 не отключается при отключении интернета, а wget без параметров - останавливается). Также, вывод команд будет подавлен, чтобы не забивать лог ~/.xsession-errors - для этого будет обширно иcпользован параметр -q ("quiet", "тихий").

Скрипт-однострочник (всё это необходимо сделать одной строкой и назначить как действие для горячей клавиши):
sh -c "st1=http://nashe1.hostingradio.ru/rock-128.mp3; st2=http://nashe1.hostingradio.ru/nashe-128.mp3; st3=http://listen.radioextreme.ru/stream1; if pgrep -a mpg321 | grep -q ${st1}; then pkill mpg321; mpg321 -qg20 ${st2}; exit; elif pgrep -a mpg321 | grep -q ${st2}; then pkill mpg321; wget -cqt0 -O- ${st3} | mpg321 -qg20 -; exit; elif pgrep -a wget | grep -q ${st3}; then pkill mpg321; exit; else mpg321 -qg20 ${st1}; fi"

Он же, но в виде обычного скрипта (можно сохранить в файл, например, radio или radio.sh, затем сделать его исполняемым (chmod +x radio.sh) и прописать, в этом случае, путь к файлу в поле Execute горячей клавиши):

#!/bin/sh
st1=http://nashe1.hostingradio.ru/rock-128.mp3;
st2=http://nashe1.hostingradio.ru/nashe-128.mp3;
st3=http://listen.radioextreme.ru/stream1;
if pgrep -a mpg321 | grep -q ${st1}; then
    pkill mpg321;
    mpg321 -qg20 ${st2};
    exit;
  elif pgrep -a mpg321 | grep -q ${st2}; then
    pkill mpg321;
    wget -cqt0 -O- ${st3} | mpg321 -qg20 -;
    exit;
  elif pgrep -a wget | grep -q ${st3}; then
    pkill mpg321;
    exit;
  else mpg321 -qg20 ${st1};
fi;
Комментарий: ПоказатьСкрыть

/grep -q ${st1}/ - здесь тихо ищется адрес http://nashe1.hostingradio.ru/rock-128.mp3 из переменной st1. /mpg321 -qg20/ - q (quiet), -g20 (gain 20, усиление 20 из 100). /wget -qt0 -O- / - wget молча (-q) и до победного (t0), то есть бесконечно, загружает поток, передавая его (-O) на stdout (-), где его уже ждёт mpg321, у которого вместо адреса указан источник stdin (-).
P. S.: wget'у пришлось добавить параметр -c, для возобновления загрузки после выхода из ждущего режима.
« Последнее редактирование: Август 15, 2016, 16:27:22 от NIN »

Оффлайн sfs

  • Местный
  • *****
  • Сообщений: 722
    • PuppyRus-Arch
Re: Скрипты
« Ответ #6 : Август 03, 2016, 16:36:42 »
Наверное не mpg321, а mpg123
Вместо него можно madplay - еще легче и тоже работает с wget
Если улучшать решение - yad (можно даже в трей вынести)

Оффлайн NIN

  • Новичок
  • **
  • Сообщений: 59
Re: Скрипты
« Ответ #7 : Август 03, 2016, 21:30:47 »
sfs, спасибо. YAD, видимо, отличная вещь - на скринах у Вас аккуратно вышло. Вкратце - победила лень, старался сделать скрипт как можно короче, поэтому предпочёл mpg321 madplay'ю, сэкономил 2 wget'а.

mpg123 не умеет (уже) регулировать gain - автор решил, что этим должен заниматься микшер, и убрал функционал. То есть, видимо, пришлось бы через pulseaudio задать программе свою громкость, скрипт бы подрос.

Сравнивал нагрузку на ЦП с учётом wget - madplay+wget равен mpg321, но пакет mpg321 меньше весит, это было лишним доводом "за".

Оффлайн sfs

  • Местный
  • *****
  • Сообщений: 722
    • PuppyRus-Arch
Re: Скрипты
« Ответ #8 : Август 04, 2016, 09:43:21 »
У madplay есть проблема - не выдернуть название исполнителя русскими буквами
Решение не нашел
А вообще укоцанный (просто удалением лишних модулей) deadbeef может вообще все и не сильно тяжелее

Оффлайн NIN

  • Новичок
  • **
  • Сообщений: 59
Re: Скрипты
« Ответ #9 : Август 04, 2016, 12:08:36 »
выдернуть название исполнителя
Новичкам везёт..
madplay -Tv file.mp3 2>&1 | grep Artist: | cut -f2- -d:Если мы не о проблеме с кодировкой.
Комментарий: ПоказатьСкрыть
Следуя правилам темы, пояснение:
происходит вызов madplay с параметрами (-) T (только вывести теги), v (verbose, расширенный вывод), file.mp3 (имя файла для воспроизведения), 2>&1 (перенаправление со stderr на stdout). Далее, в полученном выводе grep ищет сочетание Artist: , после чего cut режет результат по разделителю (delimiter, -d) : , оставляя фрагменты со второго и далее (-f 2-).
« Последнее редактирование: Август 04, 2016, 12:40:30 от NIN »

Оффлайн sfs

  • Местный
  • *****
  • Сообщений: 722
    • PuppyRus-Arch
Re: Скрипты
« Ответ #10 : Август 04, 2016, 13:04:07 »
Проблема с кодировкой. И судя по тому что вместо всех букв - одинаковое "вопрос в ромбе" - iconv не перекодирует
Выдернуть - проще в awk (и это не проблема)
« Последнее редактирование: Август 04, 2016, 13:05:38 от sfs »

Оффлайн NIN

  • Новичок
  • **
  • Сообщений: 59
Re: Скрипты
« Ответ #11 : Август 04, 2016, 16:16:24 »
Попользовавшись денёк, выявил проблему.

Если параллельно со скриптом начинает играть что-то ещё, и надо бы остановить скрипт радио, то из-за аудиомаскировки трудно понять, "уже остановлено, или ещё играет". Уведомление через notify-send - долго и медленно. Решил помигать ScrollLock перед отключением:
for i in `seq 3`; do xset led 3; sleep 0.1; xset -led 3; done
Однострочник: ПоказатьСкрыть
sh -c "st1=http://nashe1.hostingradio.ru/rock-128.mp3; st2=http://nashe1.hostingradio.ru/nashe-128.mp3; st3=http://listen.radioextreme.ru/stream1; if pgrep -a mpg321 | grep -q ${st1}; then pkill mpg321; mpg321 -qg20 ${st2}; exit; elif pgrep -a mpg321 | grep -q ${st2}; then pkill mpg321; wget -cqt0 -O- ${st3} | mpg321 -qg20 -; exit; elif pgrep -a wget | grep -q ${st3}; then pkill mpg321; for i in `seq 3`; do xset led 3; sleep 0.1; xset -led 3; done; exit; else mpg321 -qg20 ${st1}; fi"
Комментарий: ПоказатьСкрыть
for i in `seq 3`; do blabla; done - цикл, повторяющий blabla 3 раза. i - переменная, она же элемент массива чисел (item). Может быть a, b и т. п. `` - между грависами появится результат команды seq 3 (массив чисел от 1 до 3).

UPD: проморгал опцию -c для wget, чтобы воспроизведение возобновлялось после выхода из ждущего режима. Fixed.
« Последнее редактирование: Август 15, 2016, 16:31:24 от NIN »

Оффлайн NIN

  • Новичок
  • **
  • Сообщений: 59
Аудиозаметки
« Ответ #12 : Август 16, 2016, 15:50:30 »
В продолжение идеи аудиозаметок подручными средствами, решил сделать: ярлык, скрипт и хоткей для Openbox (Github).

Выяснились интересные нюансы насчёт конфига Openbox, т. к. это xml. Хоткей для OB - посадил на Win+N, что вполне гармонирует с хоткеем радио. Кстати, исправил там небольшую ошибку для ждущего режима.
Борьба с ярлыком длилась неприлично долго, пока не сообразил заэкранировать (%%) знак процента в строке Exec - хотелось сделать формат даты в имени файла более удобным.
При создании скрипта впервые столкнулся с понятием его быстродействия - поэтому некоторые команды объединены.

"Найди 10 отличий":
[Desktop Entry]
Exec=sh -c "DIR=`xdg-user-dir MUSIC`; if [ -z $DIR ]; then DIR=~/AudioNotes; else DIR=\"$DIR/AudioNotes\"; fi; NOW=`date +%%F_%%T`; if pgrep arecord; then pkill arecord; notify-send -i media-record Аудиозаметка 'Запись завершена'; sleep 2 && pkill notify-osd & exit; fi; [ ! -d \"$DIR\" ] && mkdir -p \"$DIR\"; amixer -c 0 set 'Mic Boost',0 3; arecord -f dat -d 600 -D hw:0,0 | lame --preset voice - \"$DIR/$NOW.mp3\" & notify-send -i media-record Аудиозаметка $NOW; sleep 2 && pkill notify-osd &"
Type=Application
Name[ru]=Аудиозаметка
Name=AudioNote
Icon=media-record
Categories=AudioVideo

#!/bin/sh
DIR=`xdg-user-dir MUSIC`
if [ -z $DIR ]
then
  DIR=~/AudioNotes
else
  DIR="$DIR/AudioNotes"
fi

NOW=`date +%F_%T`

if pgrep arecord
then
  pkill arecord
  notify-send -i media-record Аудиозаметка 'Запись завершена'
  sleep 2 && pkill notify-osd &
  exit
fi

[ ! -d "$DIR" ] && mkdir -p "$DIR"

amixer -c 0 set 'Mic Boost',0 3
arecord -f dat -d 600 -D hw:0,0 | lame --preset voice - "$DIR/$NOW.mp3" &
notify-send -i media-record Аудиозаметка $NOW
sleep 2 && pkill notify-osd &

    <keybind key="W-n">
      <action name="Execute">
        <command>sh -c &quot;DIR=`xdg-user-dir MUSIC`; if [ -z $DIR ]; then DIR=~/AudioNotes; else DIR=\&quot;$DIR/AudioNotes\&quot;; fi; NOW=`date +&#37;F_&#37;T`; if pgrep arecord; then pkill arecord; notify-send -i media-record Аудиозаметка 'Запись завершена'; sleep 2 &amp;&amp; pkill notify-osd &amp; exit; fi; [ ! -d \&quot;$DIR\&quot; ] &amp;&amp; mkdir -p \&quot;$DIR\&quot;; amixer -c 0 set 'Mic Boost',0 3; arecord -f dat -d 600 -D hw:0,0 | lame --preset voice - \&quot;$DIR/$NOW.mp3\&quot; &amp; notify-send -i media-record Аудиозаметка $NOW; sleep 2 &amp;&amp; pkill notify-osd &amp;&quot;</command>
      </action>
    </keybind>
Дополнения приветствуются :)
« Последнее редактирование: Август 16, 2016, 21:43:54 от NIN »

Оффлайн sfs

  • Местный
  • *****
  • Сообщений: 722
    • PuppyRus-Arch
Re: Скрипты
« Ответ #13 : Август 17, 2016, 09:42:33 »
Перед тем как начать изобретать свое не анализировали существующие проги , mhwaveEdi ?
Ничего не подошло?
Зачем вешать на Exec= сам скрипт(нечитаемо)? Удобнее сделать его отдельным скриптом и в Exec= запустить по имени

Оффлайн ek-nfn

  • Местный
  • *****
  • Сообщений: 1422
Re: Скрипты
« Ответ #14 : Август 17, 2016, 11:38:33 »
часто проще самому чего-то нужное написать, чем читать и разбирать чужое.. да еще и на чужом языке  ;D
Devuan ASCII x32..x64