Все, что выводит функция, может быть захвачено, если вы захватите правильный выходной поток. Таким образом, самый простой способ распечатать что-либо и сохранить какой-либо другой вывод - это перенаправить лишний вывод на стандартную ошибку:
function FUNCTION() {
local LOCAL="value"
echo "$LOCAL"
echo "This function is done now" >&2
}
Другая возможность - записаться в файл, а не напрямую печатать сообщения журнала, например, используя что-то вроде этого:
log() {
printf '%s\n' "$@" > my.log
}
Тем не менее, функции Bash не могут возвращать переменные . Единственное действительное «возвращаемое» значение - это код выхода. По этой причине ( и многие другие ), если вам нужны надежные журналы, возвращаемые значения, обработка исключений и многое другое, вы захотите использовать другой язык, например Python, Ruby или Java.
Как пользователь systemd, который запускает X при загрузке (без менеджера входа в систему ), я сделал следующее:https://wiki.archlinux.org/index.php/Systemd/User#Automatic_login_into_Xorg_without_display_manager
Это ограничение безопасности, применяемое XOrg по умолчанию. Вы можете отключить его, отредактировав /etc/X11/Xwrapper.config
и изменив allowed_users
с console
на anybody
.
Я протестировал это, выполнив startx
из юнит-файла systemd, и все работает нормально.
Источник :тот же тот же документ , упомянутый Лайлом .