Форумы

GNU.SU - Записки нубо-линуксойда :: Форумы :: CLI vs GUI :: Большой солнечный GUI
 
<< Предыдущая тема | Следующая тема >>
Скрипты — Выбираем случайную обоину на рабочий стол
Модераторы: tastelinux, Frizze, andrey, Bender
Автор Добавил
andrey
Чтв Окт 28 2010, 03:19

ID пользователя #2
Зарегистрирован: Срд Май 05 2010, 10:56

Сообщений: 69
feh --bg-center `ls ~/wallpapers*.jpg |sed -n "$(expr $[RANDOM%$(ls ~/wallpapers/*.jpg | wc -l)] + 1)p"`


Рассмотрим работу этого однострочника, может кому-нибудь, например новичкам, пригодится.

1) Считаем количество обоин, для этого используем программу wc с параметром -l которая подсчитает количество строк вывода команды ls ~/wallpapers/*.jpg
ls ~/wallpapers/*.jpg | wc -l



2) Генерируем случайное число так, чтобы это число не превышало количество файлов обоин в папке.
$[RANDOM%$(ls ~/wallpapers/*.jpg | wc -l)]



3) Но RANDOM генерирует числа начиная с нуля, и не затрагивает максимальное число, то есть номер последней обоины, поэтому прибавляем к получившемуся сгенерированному числу еденичку.
expr $[RANDOM%$(ls ~/wallpapers/*.jpg | wc -l)] + 1



4) Из вывода ls ~/wallpapers*.jpg берём строку под случайным номером, который только что сгенерировали, эта строка будет содержать путь к файлу обоины.
ls ~/wallpapers*.jpg |sed -n "$(expr $[RANDOM%$(ls ~/wallpapers/*.jpg | wc -l)] + 1)p"



5) Осталось только передать путь какой-нибудь программе, в данном случае это feh и установить обоину на рабочий стол.
feh --bg-center `ls ~/wallpapers*.jpg |sed -n "$(expr $[RANDOM%$(ls ~/wallpapers/*.jpg | wc -l)] + 1)p"`



Теперь можно поставить эту команду на хоткей или добавить в crontab и не нужно устанавливать какие-то специальные утилиты, если вы хотите видеть каждый день что-нибудь новое на своём рабочем столе ;)

Update

Товарищ muhas предложил более простой вариант. Краснею и прилагаю более Ъ версию однострочника:
я конечно извиняюсь за занудство, но
зачем два раза вызвать ls, можно же всё сделать намного проще и короче и даже не вызывая sed
feh --bg-center `ls  ~/wallpapers*.jpg | sort -R  |head -n 1`


а тепперь по пунктам.
sort -R

параметр -R обеспечивает рандомную сортировку
head -n 1

выводим шапку из одной строки (можно и tail -n 1, т.е. одну строку снизу или sed'ом awk'ом обрабатывать строки - но тут не принципиально ибо всё-равно рандомная сортировка)
собственно весь вывод ls (sort и head) можно обработать одной командой awk но это для гурманов, ибо авк язык не простой - но мощьный(я сам осилил меньше минимума, честно)...

херь взятая в кавычки ` означает что вместо этого подставлять результат выполнения команды а не саму команду (аналог $(команда))
параметр для feh означает центрирование картинки, есть ещё --bg-scale для растягивания и прочие...

Да, Я Зануда, но команда из поста мне показалась огромной и нерациональной...
Наверх
Выбираем случайную обоину на рабочий стол   скрипт автоматической замены обоев на рабочем стол   random wallpaper script   linux   

 

Перейти:     Наверх

Транслировать сообщения этой темы: rss 0.92 Транслировать сообщения этой темы: rss 2.0 Транслировать сообщения этой темы: RDF
Powered by e107 Forum System