Мне кажется, что это ошибка в функции createUser
из-за отсутствия двойных кавычек вокруг различных переменных, содержащих имя каталога. Нет способа обойти это, добавив в аргумент escape-символы, кавычки и т. Д .; вам действительно нужно исправить сценарий, который вызывает проблему.
Я не проверял это, но добавление двойных кавычек в соответствующие строки 98-111 может сделать это так:
# Make sure dirs exists
if [ -n "$dir" ]; then
IFS=',' read -a dirArgs <<< "$dir" # Quotes added here
for dirPath in "${dirArgs[@]}"; do # And here
dirPath="/home/$user/$dirPath"
if [ ! -d "$dirPath" ]; then
log "Creating directory: $dirPath"
mkdir -p "$dirPath" # And here
chown -R $uid:users "$dirPath" # And here
else
log "Directory already exists: $dirPath"
fi
done
fi
Возможно, в сценарии есть и другие места, способствующие возникновению проблемы, но, по крайней мере, необходимо внести вышеуказанные изменения. Кроме того, в первой строке, к которой я добавил кавычки, они нужны только в некоторых версиях bash, но лучше иметь их на всякий случай.
p.s. строка 39, вероятно, также должна быть исправлена:
IFS=':' read -a args <<< "$1"
Текущая версия использует $@
, что просто странно. Функция всегда получает только один аргумент, и некоторые версии bash будут неверно интерпретировать, что если она не заключена в кавычки, то у меня есть лучший способ сделать это.
shellcheck.net указывает на кучу других сомнительных вещей, но это единственное, что я вижу, должно иметь значение.