Osascript "текст возвращен" ввода не включает пробелы - PullRequest
0 голосов
/ 23 марта 2020

У меня есть следующий скрипт для создания нового пользователя в macOS:

#!/bin/bash

export PATH=/usr/bin:/bin:/usr/sbin:/sbin

consoleUser() {
    echo "show State:/Users/ConsoleUser" | scutil | awk '/Name :/ && ! /loginwindow/ { print $3 }'
}

displayfortext() { # $1: message $2: default text
    message=${1:-"Message"}
    defaultvalue=${2:-"default value"}
    user=$(consoleUser)
    if [[ $user != "" ]]; then
        uid=$(id -u "$user")

        launchctl asuser $uid /usr/bin/osascript <<-EndOfScript
            text returned of ¬
                (display dialog "$message" ¬
                    default answer "$defaultvalue" ¬
                    buttons {"OK"} ¬
                    default button "OK")
            EndOfScript
    else
        exit 1
    fi
}
realname=$(displayfortext "Enter the real Name (e.g. John Doe)" "John Doe")
username=$(displayfortext "Enter the Username (e.g. john.doe)" "john.doe")
sudo dscl . -create /Users/$username RealName $realname #Set Real Name (e.g. John Doe)

Теперь после последней команды sudo (и нескольких других, которые я пропустил) пользователь успешно создан. Проблема в том, что имя пользователя (Джон Доу) - только "Джон", и все, что за пробелами, исчезло.

У кого-нибудь есть идеи, как это исправить? Я не хочу, чтобы между Джоном и Доу был другой символ (ничего похожего на John_Doe) это должен быть пробел (политика компании).

1 Ответ

0 голосов
/ 23 марта 2020

bash разбивает аргументы на пустое пространство. Следовательно, если realname содержит пробел, отдельные слова в нем становятся двумя разными параметрами. Чтобы избежать этого, заключите в кавычки параметр "$realname".

...