Если вы используете логин, посмотрите /etc/login.defs
, запись TTYPERM
.
Общий совет по отладке :В начале сценария вы должны использовать это для перехвата вывода ошибок из ваших команд, а также убедиться, что запись об устройстве уже существует.
exec >> /home/ubuntu/bin/tty.log 2>&1
Вот для чего нужен статус выхода.
touch
— это команда для обновления временных меток файла или его создания, если этот файл изначально не существовал.
Он вернет успех в своем статусе выхода, если он выполнил эту цель, и отказ в противном случае¹. В случае сбоя он обычно выводит сообщение об ошибке с подробным описанием причины сбоя.
if touch -- "$file"; then
printf '%s\n' "$file was created or updated"
fi
В вашем сценарии, если вы хотите убедиться, что не продолжите работу, если touch
не удастся, вы должны написать это:
touch -- "$file" || exit
(здесь сценарий завершится с тем же статусом выхода из-за ошибки, что и вtouch
).
Или добавьте else exit
в оператор if
выше.
¹ touch
также мог сообщать об ошибке, даже если ему удавалось обновить файл в некоторых патологических случаях, например, он был убит или закончился какой-то ресурс. В большинстве таких случаев ваш сценарий, вероятно, также будет считать это ошибкой при обновлении файла