Копирование картинки в /usr/share/backgrounds/ скриптом

What bash script concept am I missing? Threads, maybe?

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

Чтобы получить PID фоновой команды, используйте переменную $!.

Чтобы получить статус завершения фоновой команды, используйте wait()и укажите ее PID. Обратите внимание: вызовы wait()будут заблокированы, если команда еще не завершилась . Если эта блокировка является проблемой (, это может быть в вашем случае ), вы можете выполнить проверки с помощьюps(или другого метода )перед вызовом wait(), чтобы увидеть, готов ли ваш процесс к сбору урожая, обычно в цикле, где есть сторожевой таймер или какой-либо другой способ установки ограничения на время выполнения задачи.

Рассмотрим следующий шаблон на основе цикла:

complete=0
cycles=0
# Task 1
sleep 200 &
pid=$!
while [[ complete -eq 0 ]]; then
    ps -o pid= -p $pid > /dev/null
    if [[ $? -ne 0 ]]; then
        # Signal complete to logic below
        complete=1
        break;
    fi
    # Perform some timeout / cycle check to give up on this task
    cycles=$((cycles + 1))
    if [[ $cycles -gt 100 ]]; then # whatever, this is just a simple watchdog example
        break;
    fi
    # Optional sleep
    sleep 1
done
if [[ $complete -eq 1 ]]; then
    # Process the command's exit status
    wait $pid
    if [[ $? -ne 0 ]]; then
        : # handle command failed perhaps
    else
        : # do other things, assuming exit of 0 is a good thing
    fi
else
    # Process a command watchdog failure
    kill -9 $pid # come what may
fi

Для более сложного управления заданиями вы можете переместить проверку команд и управление циклами в функции bash и значительно очистить этот код.

-3
07.08.2020, 02:44
1 ответ

Я рекомендую вам просмотреть 2 вещи.

1. Просмотрите разрешения Если вы не запускаете скрипт как root, проверьте разрешения. /usr/share/backgrounds принадлежит пользователю root, и для записи в него потребуется действие суперпользователя:

sudo cp "$file" /usr/share/backgrounds/wall.png

2. Просмотрите путь Если разрешения правильные, то проверьте путь.

Предоставленный вами пример кода пытается скопировать файл в /usr/share/background . Попробуйте изменить его следующим образом:

cp "$file" /usr/share/backgrounds/wall.png

Обратите внимание, что это фон s(множественное число ).

1
18.03.2021, 23:14

Теги

Похожие вопросы