Чтобы напечатать или присвоить переменную, когда у вас нет преимущества завершающего пробела, вы можете использовать ${}
для расширения параметра вместо $
...
echo "12${three}45"
Для ваших целей это должно подойти, и это, вероятно, наиболее часто используемый подход. Также обратите внимание, что echo "12$three"
будет работать нормально. Конечный символ — вот что важно. Это должен быть недопустимый символ в имени переменной. Тем не менее, использование echo "12${three}"
не повредит, и я думаю, что это улучшит читаемость.
Иногда вместо этого вы можете увидеть нечто подобное...
echo "12"$three"45"
Обычно я бы этого избегал. В качестве альтернативы есть printf...
printf "12%d45\n" "$three"
Подробнее см. man printf
, так как доступно множество форматов.
Я нашел это сообщение в блоге , в котором довольно хорошо показано, как это работает в 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.
В сообщении в блоге говорится, что для того, чтобы эти изменения вступили в силу, необходимо перезагрузить компьютер, но на самом деле я обнаружил, что они сработали сразу после выключения системы. Он говорит о том, что действие может занять много времени, что относится и ко мне, и говорит, что другие решения, которые он нашел в Интернете, не позволили выполнить его задачу до конца. Однако он не объясняет, какая особенность его кода обеспечивает правильную работу.