Этот скрипт готов к открытым исходным кодом? (Случайный XKCD обои)


Я написал маленький скрипт и опубликовал на сайте GitHub. В репозитории есть также файл README, который объясняет, как использовать его более подробно.

Это первый раз, когда я открываю источников/опубликовано то, что я написал, поэтому мне интересно, считаете ли вы, что этот код будет готов для общественности.

Некоторые указатели, но не стесняйтесь добавлять свои собственные мысли:

  1. Профессионально? Если нет, то что нужно сделать?
  2. Несколько замечаний слишком много? Это было ОК, чтобы опубликовать ее, хотя я знаю, что в некоторых случаях он не работает (я писал об этом в ридми)?

#    random xkcd wallpaper: gets a random xkcd comic from xkcd.com and sets it as the desktop background.


#!/bin/bash



# /random/comic redirects to random comic. Wget gets the index.html of the comic.
wget http://dynamic.xkcd.com/random/comic/

echo $(pwd)

#Searches the line in the index.html file that points to the url where the actual comic is placed.
#The image urls are of the form: http://imgs.xkcd.com/comics/.'name of comic'.(png | jpg)
url=$(cat index.html | grep -o -m 1 http://imgs.xkcd.com/comics/.*\.png)

#Assuming picture format is .png. Gets the name of the image file by only matching what comes after the last forward slash.
name_pic=$(echo $url | grep -o [^/]*\.png)
is_png=1


#Sets url and name_pic in the case of the picture being in .jpg format.
if [ -z "$url" ]
then
    url=$(cat index.html | grep -o -m 1 http://imgs.xkcd.com/comics/.*\.jpg)
    name_pic=$(echo $url | grep -o [^/]*\.jpg)
    is_png=0   
fi     


#Downloads the image and saves it under its appropriate name.
wget --output-document="$name_pic"  "$url"

#Sets the desktop background
gconftool-2 --set --type=string /desktop/gnome/background/picture_filename $(pwd)/"$name_pic"

#Cleans up
rm index.html

#For some reason, if the image is moved to fast (e.g without a wait) the background does not get set.
sleep 1

#The current wallpaper can always be found under "current_xkcd_wallpaper.png" or "current_xkcd_wallpaper.jpg". Also prevents cluttering the directory with images. 
#If you want to keep all the pictures you downloaded, uncomment the following lines.

#Cleans up. Makes sure that there is only one current_xkcd_wallpaper image file.
#rm current_xkcd_wallpaper.*

rm current_xkcd_wallpaper.*

if [ $is_png = 1 ] ; then
    mv $(pwd)/"$name_pic" $(pwd)/current_xkcd_wallpaper.png
else
    mv $(pwd)/"$name_pic" $(pwd)/current_xkcd_wallpaper.jpg
fi


1271
13
задан 29 января 2011 в 08:01 Источник Поделиться
Комментарии
3 ответа

К сожалению, это может звучать грубо, но я действительно думаю, что GPLv3 будет простой перебор кода.
И это даже может звучать жестче: то, что вы хотите, чтобы архив можно сделать в 3-вкладыш, поэтому я думаю, что общественное достояние подошло бы гораздо лучше.

Я не хочу, чтобы показать вам, как все начинается, как Новичок, и в основном это ваша мысль, которая рассчитывает, реализация себя в основном упражнения для читателя. Так продолжать обучение раковины, это чрезвычайно мощный!

Разработанный пример, который в основном делает то, что ваш скрипт делает, он заимствует некоторые детали из своего скрипта:

#!/bin/bash

cd "`dirname "$0"`" || exit

[ 0 = "$#" ] &&
set -- gconftool-2 --set --type=string /desktop/gnome/background/picture_filename

url="`curl -sL http://dynamic.xkcd.com/random/comic/ | grep -om1 'http://imgs.xkcd.com/comics/[^.]*\.[a-z]*'`"
img="$PWD/xkcd-wallpaper.${url##*.}"

curl -so "$img" --fail "$url" &&
"$@" "$img"

Я обернул линии просто для лучшей читабельности. Обратите внимание, что каждый программист имеет набор любимых инструментов и способов, и всегда можно чему-то научиться друг от друга. Как я узнал, "команда grep -o" от вашего сценария сегодня (я обычно использую sed, но команда grep -o-это гораздо более элегантно в этом контексте).

Хорошая вещь на Unix заключается в том, что вы можете цепи так легко и гибко. Нет нужды выжимать все в одну монолитную сценарий. Лучшим способом будет создать два скрипта в качестве строительных блоков, а затем соединить их вместе.

Один вытягивает картину. Второй устанавливает картинку на гнома. Как это:

xkcd-pull.sh:

#!/bin/bash

url="`curl -sL http://dynamic.xkcd.com/random/comic/ | grep -om1 'http://imgs.xkcd.com/comics/[^.]*\.[a-z]*'`"

img="/tmp/xkcd-wallpaper.${url##*.}"
img="${1:-$img}"

curl -so "$img" --fail "$url" && echo "$img"

set-gnome-wp.sh

#!/bin/bash

exec gconftool-2 --set --type=string /desktop/gnome/background/picture_filename "$@"

А затем соединить вместе, например в командной строке:

img="`./xkcd-pull.sh`" && ./set-gnome-wp.sh "$img"

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

Как вы можете легко увидеть, это не осталось ничего, что нельзя найти в руководстве. Так что все оставили творчество-это ваша идея "XKCD -> обои" в то время как реализация "тривиальный".

(Я не проверить сниппеты кода. Может, там еще есть опечатка. Мой вклад код является общественным достоянием.)

12
ответ дан 30 января 2011 в 12:01 Источник Поделиться

#!/bin/bash

Shebang линия не имеет никакого эффекта, если это не на первой линии, поэтому вы должны поставить его перед уведомление об авторских правах.

echo $(pwd)

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

cat index.html | grep -o -m 1 http://imgs.xkcd.com/comics/.*\.png

Это бесполезно использовать кошку. Если вы хотите, чтобы команда grep по файлу, можно просто передать имя файла в качестве последнего аргумента - не надо кошку и трубы. (То же касается последующих мест в коде, где вы сделать то же самое с .формат JPG).

gconftool-2 --set --type=string /desktop/gnome/background/picture_filename $(pwd)/"$name_pic"

Я думаю, что это будет хорошая идея, чтобы сделать команду, чтобы изменить обои настраиваемые, так что не только GNOME, но пользователи могут также использовать ваш скрипт.

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


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

14
ответ дан 29 января 2011 в 09:01 Источник Поделиться

А также другие проблемы, уже описанные, ваш код получает файл 'index.html', который может ударить любой файл с тем же именем в текущем каталоге. Может быть, это будет хорошая идея, чтобы создать новый каталог, так что вы не напортачили?

Также было бы хорошей идеей, чтобы убедиться, что мусор убран, даже если сценарий будет прерван. Вы сделаете это с "ловушка". Я рекомендую захват левой, ИНТ, бросить, трубы и краткосрочные сигналы:

trap "rm -f index.html; exit 1" 0 1 2 3 13 15

...other actions...

rm -f index.html
trap 0

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

7
ответ дан 30 января 2011 в 08:01 Источник Поделиться