【发布时间】:2015-12-23 11:06:18
【问题描述】:
当我在终端或作为 shell 脚本运行以下 shell 命令时:
test -f test.dmg && rm test.dmg
输出:如果当前目录中存在 test.dmg,则删除它。
但是,在 swift 中运行相同的命令如下所示,它没有按预期工作:
#!/usr/bin/env xcrun swift
func shell(launchPath: String, arguments: [AnyObject] = []) -> String? {
let task = NSTask()
task.launchPath = launchPath
task.arguments = (arguments as! [String])
print(task.arguments)
let pipe = NSPipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output = NSString(data: data, encoding: NSUTF8StringEncoding)
print(output)
return (output as! String)
}
let arguments = ["test", "-f", "test.dmg", "&&", "rm", "test.dmg"]
shell("/bin/sh", arguments)
使用 swift 输出:test: test: is a directory
有人可以帮忙吗?
【问题讨论】:
-
当前目录下是否有目录
test?您是否应该使用-c标志(然后将实际命令作为单个字符串参数传递给-c标志)? -
@EtanReisner 是的,我在当前目录中有测试文件夹。但是,尽管我需要将完整的命令作为单个字符串参数传递,但这个 -c 标志起到了作用。谢谢:)
-
是的,我就是这么说的。