LINUX.ORG.RU

Разбираюсь со скриптом на bash

 ,


0

1
#!/bin/bash -x

DBLIST="$(find $HOME/Загрузки -regex ".*\.\(jpeg\|jpg\)$" -type f -printf "%f\n")"
FILES_COUNT="$(/usr/bin/find $HOME/Загрузки -regex ".*\.\(jpeg\|jpg\)$" -type f -printf "%f\n" | wc -l)"
FILE_NUM="$(/usr/bin/expr $RANDOM % $FILES_COUNT + 1)"

echo $HOME

for var in $DBLIST
do
    index=$(($index+1))
    if [[ $index = $FILE_NUM ]]
    then
        FILETORESTORE=$var
        echo "$FILETORESTORE"
        break
    fi
done

/usr/bin/gsettings set org.gnome.desktop.background picture-uri "file://$HOME"/Загрузки/"$FILETORESTORE"

Должен менять обои на рабочем столе в гноме, запускается из консоли, не работает по крону

/home/«$(whoami)»/

Мда, сразу видно специалиста по обфускации. Но $HOME всё же будет универсальнее.

firkax ★★ ()

Должен менять обои на рабочем столе в гноме, запускается из консоли, не работает по крону

С чего ты решил, что крон работает от твоего пользователя? Чему равно $home ?

sigurd ★★★★★ ()
Ответ на: комментарий от gremlin_the_red

выложил последнюю версию. из консоли, работает. перед этим была наспех поправленная прямо в топике

TolkoSprosit ()

Некоторым X-овым приложениям для корректной работы нужно чтобы они были запущены в X-сервере.

Ты же в cron запускаешь свой скрипт просто в консоли.

Лучше напиши скрипт обёртку, которая в цикле с нужным тебе интервалом будет вызывать твой скрипт смены обоев.

И добавь этот скрипт обёртку в автозапуск через средства DE Gnome.

anonymous ()
Ответ на: комментарий от anonymous

Некоторым X-овым приложениям для корректной работы нужно чтобы они были запущены в X-сервере.

достаточно определить DISPLAY и XAUTHORITY и все будет работать откуда угодно

anonymous2 ★★★★★ ()
Последнее исправление: anonymous2 (всего исправлений: 2)
Ответ на: комментарий от TolkoSprosit

Попробуй по этой методе - там просто удаляют линк на файл обоев и создают новый линк, ничего регистрировать не надо.
https://habr.com/ru/sandbox/143848/

sigurd ★★★★★ ()
Последнее исправление: sigurd (всего исправлений: 1)
Ответ на: комментарий от sigurd

отличная идея, но реализация оставляет желать лучшего.

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

rm x && ln -s a x это то же, что ln -sf a x.

суммарно это должно быть двумя строчками в кронтабе (при запуске и через каждый интервал) и парой строчек в скрипте (сконвертировать время в номер обоев, сделать ln)

anonymous ()
#!/bin/bash

# Разделённый whitespace-ами список каталогов, где следует искать файлы.
# Предполагается, что имена самих каталогов не могут содержать whitespace-ы, а в именах внутри них не может быть переводов строк.
DBDIRS="${HOME}/Загрузки"

DBLIST="$(/usr/bin/find ${DBDIRS} -type f \( -name '*.[Jj][Pp][Gg]' -o -name '*.[Jj][Pp][Ee][Gg]' \))" || {
    echo "find failed: ${?}" >&2
    exit 1
}
[ -n "${DBLIST}" ] || {
    echo 'not find' >&2
    exit 2
}
FILES_COUNT="$(echo "${DBLIST}"|wc -l)"
FILE_NUM=$((RANDOM%FILES_COUNT+1))
FILETORESTORE="$(echo "${DBLIST}"|/usr/bin/nead -n ${FILE_NUM}|/usr/bin/tail -n -1)"

## Дальше можно как-то использовать FILETORESTORE не забывая про:
## а) нужно как-то обрабатывать возможные последствия race condition;
## б) если делать из ${FILETORESTORE} URI, то наверное надо не просто добавлять file:// в начало, а хотя бы пробелы преобразовыать по правилам urlencoded;
## в) окружения при запуске из интерактивного shell и из cron могут отличаться, и это может повлиять на результат.
anonymous ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.