Предоставление сценарию достаточного времени для завершения перед завершением работы.

Чтобы напечатать или присвоить переменную, когда у вас нет преимущества завершающего пробела, вы можете использовать ${}для расширения параметра вместо $...

echo "12${three}45"

Для ваших целей это должно подойти, и это, вероятно, наиболее часто используемый подход. Также обратите внимание, что echo "12$three"будет работать нормально. Конечный символ — вот что важно. Это должен быть недопустимый символ в имени переменной. Тем не менее, использование echo "12${three}"не повредит, и я думаю, что это улучшит читаемость.

Иногда вместо этого вы можете увидеть нечто подобное...

echo "12"$three"45"

Обычно я бы этого избегал. В качестве альтернативы есть printf...

printf "12%d45\n" "$three"

Подробнее см. man printf, так как доступно множество форматов.

1
05.07.2019, 05:23
1 ответ

Я нашел это сообщение в блоге , в котором довольно хорошо показано, как это работает в SysV и systemd, и объясняется, как решать такие проблемы, как переход файловой системы в режим -только для чтения и команда вы хотите бежать, возможно, это займет много времени. Следующие сценарии в основном те, которые он дает для systemd, с небольшими изменениями.

брауни _shutdown.sh:

#!/bin/bash
# see https://fitzcarraldoblog.wordpress.com/2018/01/13/running-a-shell-script-at-shutdown-only-not-at-reboot-a-comparison-between-openrc-and-systemd/
REBOOT=$( systemctl list-jobs | egrep -q 'reboot.target.*start' && echo "rebooting" || echo "not_rebooting" )
if [ $REBOOT = "not_rebooting" ]; then
  /usr/bin/python /home/pi/Documents/programming/brownie/brownie_blank.py
fi

домовой _выключение.сервис:

# see https://fitzcarraldoblog.wordpress.com/2018/01/13/running-a-shell-script-at-shutdown-only-not-at-reboot-a-comparison-between-openrc-and-systemd/
[Unit]
Description=Blank out the eInk screen before shutting down
DefaultDependencies=no
Before=shutdown.target halt.target
# The following is required because my scripts are in /home:
RequiresMountsFor=/home

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/brownie_shutdown.sh

[Install]
WantedBy=halt.target shutdown.target

Makefile:

configure_shutdown:
    cp brownie_shutdown.sh /usr/local/sbin/brownie_shutdown.sh
    chmod +x /usr/local/sbin/brownie_shutdown.sh
    cp brownie_shutdown.service /etc/systemd/system/brownie_shutdown.service
    systemctl enable brownie_shutdown.service

В сценарии bash код в верхней части предназначен для того, чтобы различать загрузку и завершение работы. В файле.service есть строка RequiresMountsFor=/home, потому что мои скрипты находятся в /home. Строка ExecStart указывает на скрипт bash. Makefile должен выполняться от имени root.

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

1
27.01.2020, 23:41

Теги

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