Swift 为什么defaults命令只是返回语法?
我正在尝试从我在Xcode 11.4中使用的应用程序运行终端命令Swift 为什么defaults命令只是返回语法?,swift,xcode,terminal,macos-catalina,Swift,Xcode,Terminal,Macos Catalina,我正在尝试从我在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函数中
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(“helloworld”)
脚本替换上面的代码时,这个按钮实际上调用了这个函数,它工作得很好。但是,当我在操作中使用上述代码并单击它时。答案是
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”[-currentHost |-host]后跟以下选项之一:
读取显示所有默认值
读取显示给定域的默认值
读取显示给定域、键的默认值
read type显示给定域的类型,key
写入域(覆盖现有域)
为域写入密钥
重命名将旧的_键重命名为新的_键
删除删除域
删除域中的密钥
导入将plist写入到域的路径
导入-将plist从stdin写入域
导出将域另存为路径的二进制plist
导出-将域作为xml plist写入标准输出
域列出所有域
查找列出包含word的所有条目
帮助打印此帮助
is(|-app |-globalDomain)
或指向省略“.plist”扩展名的文件的路径
是以下各项之一:
-串
-资料
-内部[eger]
-浮动
-bool[ean](真|假|是|否)
-日期
-数组。。。
-数组添加。。。
-口述。。。
-dict添加。。。
如果我运行上述脚本默认值,请删除com.apple.dock;在终端中手动关闭所有停靠
,它工作正常并重置所有停靠设置
其他信息
defaults写入com.apple.dock持久应用程序-数组添加
“{”瓷砖类型“=”间隔瓷砖“}”;killall Dock
再次在
终端,但不是从应用程序运行时spacer.command
,然后将let arguments=[“defaults delete com.apple.dock;killall dock”]
行更改为let arguments=[“spacer.command”]
。然而,它产生了同样的结果我的问题是,swift代码似乎只运行第一个单词
defaults
,而不是运行full命令,因为如果在终端中这样做,则会得到相同的结果。它为什么要这样做;有人知道如何修复它吗?如果您试图调用多个命令,那么您需要调用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()
或者调用每个命令(
默认值
和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()
很确定每个“词”都应该是一个独立的论点。这不是什么大争论,谢谢你的回答。我尝试了上面的代码,但出现以下错误
/usr/bin/defaults:/usr/bin/defaults:无法执行二进制文件
@myname您可能必须将“sh”
作为第一个参数传递。。。否则可能会使用-c
或-e
或类似的方法。我希望您不打算在应用商店中发布您的应用。。。