bash - Osascript“返回的文本”输入不包括空格
问题描述
我有以下用于在 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),它必须是空格(公司政策)。
解决方案
bash 打破了关于空白的论点。因此,如果realname
包含空格,则其中的各个单词成为两个不同的参数。引用参数"$realname"
以避免这种情况。
推荐阅读
- movilizer - 如何替换 MovilizerMasterdataUpdate 条目值 url 值
- typescript - 打字稿:基于兄弟对象键的值的强类型(和自动完成)
- javascript - 输入一个字符串得到两个输出
- javascript - 数组不是在 react-native 中复制的
- java - 在Java源代码中,为什么 ArrayList.add 有参数作为泛型类型 T 而 addAll 有参数作为泛型类型?
- javascript - 如果子字符串后有一个数字,则按该数字量重复该子字符串(javascript)
- javascript - 为什么 webpack-html-plugin 在使用模板时在头部而不是正文中添加脚本标签?
- python - 如何使用另一个函数停止 discord.py 中的 on_message()?
- c++ - 如何在OpenGL中围绕屏幕中心旋转
- python - 线性规划能解决这个问题吗?