为什么 defaults 命令只返回语法?
Why is the defaults command just returning the syntax?
我正在尝试 运行 来自我在 Xcode 11.4.
中工作的应用程序的终端命令
let path = "/usr/bin/defaults"
let arguments = ["defaults delete com.apple.dock; killall Dock"]
let task = Process.launchedProcess(launchPath: path, arguments: arguments)
task.waitUntilExit()
该代码位于连接到按钮的 @IBAction
函数中。我已经测试过按钮确实调用了它,因为我用一个简单的 print("Hello world")
脚本替换了上面的代码并且效果很好。但是,当我在操作中使用上述代码并单击它时。响应是
Command line interface to a user's defaults.
Syntax:
'defaults' [-currentHost | -host <hostname>] followed by one of the following:
read shows all defaults
read <domain> shows defaults for given domain
read <domain> <key> shows defaults for given domain, key
read-type <domain> <key> shows the type for the given domain, key
write <domain> <domain_rep> writes domain (overwrites existing)
write <domain> <key> <value> writes key for domain
rename <domain> <old_key> <new_key> renames old_key to new_key
delete <domain> deletes domain
delete <domain> <key> deletes key in domain
import <domain> <path to plist> writes the plist at path to domain
import <domain> - writes a plist from stdin to domain
export <domain> <path to plist> saves domain as a binary plist to path
export <domain> - writes domain as an xml plist to stdout
domains lists all domains
find <word> lists all entries containing word
help print this help
<domain> is ( <domain_name> | -app <application_name> | -globalDomain )
or a path to a file omitting the '.plist' extension
<value> is one of:
<value_rep>
-string <string_value>
-data <hex_digits>
-int[eger] <integer_value>
-float <floating-point_value>
-bool[ean] (true | false | yes | no)
-date <date_rep>
-array <value1> <value2> ...
-array-add <value1> <value2> ...
-dict <key1> <value1> <key2> <value2> ...
-dict-add <key1> <value1> ...
如果我在终端中手动 运行 上述脚本 defaults delete com.apple.dock; killall Dock
它工作正常并重置所有扩展坞设置。
其他信息
- 该应用程序是一个代理,因为我将其作为 status/menu 栏
申请
- 我是 运行ning Mac OS 10.15.4 Catalina
- 我也试过了
运行ning
defaults write com.apple.dock persistent-apps -array-add
'{"tile-type"="spacer-tile";}'; killall Dock
再次工作
终端,但不是当 运行 来自应用程序时。
- 我还尝试将这些命令放入 Xcode 项目内的文件中,例如
spacer.command
,然后将 let arguments = ["defaults delete com.apple.dock; killall Dock"]
行更改为 let arguments = ["spacer.command"]
。但是它产生相同的结果。
我的问题是 运行 宁整个命令, swift 代码似乎只是 运行 第一个词 defaults
因为如果你这样做终端你得到相同的结果。为什么要这样做;有人知道如何解决吗?
如果您尝试调用多个命令,那么您希望直接调用 shell,而不是 defaults
命令。
还有:
- 将每个参数分隔成数组中的一个单独的词。
- 我可能会使用
&&
来调用多个命令。
类似于:
let path = "/bin/sh"
let arguments = ["/usr/bin/defaults", "delete", "com.apple.dock", "&&", "killall", "Dock"]
let task = Process.launchedProcess(launchPath: path, arguments: arguments)
task.waitUntilExit()
或者分别调用每个命令(defaults
和 killall
)。
感谢大家的帮助。我通过将 shell 命令放入项目目录中的文件然后将此代码调用到 运行 来解决它...
let compiler = "/bin/sh"
let filePath = Bundle.main.url(forResource: "scriptName", withExtension: "sh")
let file = filePath!.path
let arguments = [file]
let task = Process.launchedProcess(launchPath: compiler, arguments: arguments)
task.waitUntilExit()
我正在尝试 运行 来自我在 Xcode 11.4.
中工作的应用程序的终端命令let path = "/usr/bin/defaults"
let arguments = ["defaults delete com.apple.dock; killall Dock"]
let task = Process.launchedProcess(launchPath: path, arguments: arguments)
task.waitUntilExit()
该代码位于连接到按钮的 @IBAction
函数中。我已经测试过按钮确实调用了它,因为我用一个简单的 print("Hello world")
脚本替换了上面的代码并且效果很好。但是,当我在操作中使用上述代码并单击它时。响应是
Command line interface to a user's defaults.
Syntax:
'defaults' [-currentHost | -host <hostname>] followed by one of the following:
read shows all defaults
read <domain> shows defaults for given domain
read <domain> <key> shows defaults for given domain, key
read-type <domain> <key> shows the type for the given domain, key
write <domain> <domain_rep> writes domain (overwrites existing)
write <domain> <key> <value> writes key for domain
rename <domain> <old_key> <new_key> renames old_key to new_key
delete <domain> deletes domain
delete <domain> <key> deletes key in domain
import <domain> <path to plist> writes the plist at path to domain
import <domain> - writes a plist from stdin to domain
export <domain> <path to plist> saves domain as a binary plist to path
export <domain> - writes domain as an xml plist to stdout
domains lists all domains
find <word> lists all entries containing word
help print this help
<domain> is ( <domain_name> | -app <application_name> | -globalDomain )
or a path to a file omitting the '.plist' extension
<value> is one of:
<value_rep>
-string <string_value>
-data <hex_digits>
-int[eger] <integer_value>
-float <floating-point_value>
-bool[ean] (true | false | yes | no)
-date <date_rep>
-array <value1> <value2> ...
-array-add <value1> <value2> ...
-dict <key1> <value1> <key2> <value2> ...
-dict-add <key1> <value1> ...
如果我在终端中手动 运行 上述脚本 defaults delete com.apple.dock; killall Dock
它工作正常并重置所有扩展坞设置。
其他信息
- 该应用程序是一个代理,因为我将其作为 status/menu 栏 申请
- 我是 运行ning Mac OS 10.15.4 Catalina
- 我也试过了
运行ning
defaults write com.apple.dock persistent-apps -array-add '{"tile-type"="spacer-tile";}'; killall Dock
再次工作 终端,但不是当 运行 来自应用程序时。 - 我还尝试将这些命令放入 Xcode 项目内的文件中,例如
spacer.command
,然后将let arguments = ["defaults delete com.apple.dock; killall Dock"]
行更改为let arguments = ["spacer.command"]
。但是它产生相同的结果。
我的问题是 运行 宁整个命令, swift 代码似乎只是 运行 第一个词 defaults
因为如果你这样做终端你得到相同的结果。为什么要这样做;有人知道如何解决吗?
如果您尝试调用多个命令,那么您希望直接调用 shell,而不是 defaults
命令。
还有:
- 将每个参数分隔成数组中的一个单独的词。
- 我可能会使用
&&
来调用多个命令。
类似于:
let path = "/bin/sh"
let arguments = ["/usr/bin/defaults", "delete", "com.apple.dock", "&&", "killall", "Dock"]
let task = Process.launchedProcess(launchPath: path, arguments: arguments)
task.waitUntilExit()
或者分别调用每个命令(defaults
和 killall
)。
感谢大家的帮助。我通过将 shell 命令放入项目目录中的文件然后将此代码调用到 运行 来解决它...
let compiler = "/bin/sh"
let filePath = Bundle.main.url(forResource: "scriptName", withExtension: "sh")
let file = filePath!.path
let arguments = [file]
let task = Process.launchedProcess(launchPath: compiler, arguments: arguments)
task.waitUntilExit()