【问题标题】:Osascript "text returned of" input does not include whitespaceOsascript“返回的文本”输入不包括空格
【发布时间】:2020-07-03 16:34:16
【问题描述】:

我有以下用于在 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)只是“John”,空格后面的所有内容都消失了。

有人知道如何解决这个问题吗?我不希望在 John 和 Doe 之间出现另一个字符(不像 John_Doe)它必须是空格(公司政策)。

【问题讨论】:

  • 在您的 dscl 命令中,您正在使用 bash 变量 usernamerealname,但我看不到它们在哪里被赋值。
  • 我添加了用户名行 - 实名声明已经在其中(从底部开始的第 2 和第 3 行)。

标签: bash macos shell applescript osascript


【解决方案1】:

bash 打破了关于空白的论点。因此,如果realname 包含空格,则其中的各个单词将成为两个不同的参数。将参数引用为"$realname" 以避免这种情况。

【讨论】:

  • 我确实将 realname=$(displayfortext "Enter the real Name (e.g. John Doe)" "John Doe") 更改为 $"realname"=$(displayfortext "Enter the real Name (e.g. John Doe)" "John Doe")。现在创建用户后就没有名字了。
  • 这个改动没有意义!!!正如我所说,问题在于传递参数,因此您当然必须在dscl 命令中引用它,而不是在分配变量的地方,并且引用不是@ 987654327@,但"$realname"
  • @LWun :您可以阅读here 了解 bash 中的引用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-18
  • 1970-01-01
  • 1970-01-01
  • 2017-04-10
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
相关资源
最近更新 更多