如何解决如何在执行命令中使用管道?
xattr -p com.apple.Metadata:_kMDItemUserTags '/Users/Shared/MeinDesktop/fasttemp/Fotos noch einzusortieren/_ORG/Foto.jpg' | xxd -r -p | plutil -convert json - -o -
我想在我的应用程序中执行它。所以我尝试了
func readLabels(_ filePath : String) -> String {
return shell(launchPath: "/usr/bin/xattr",arguments: ["-p","com.apple.Metadata:_kMDItemUserTags",filePath," | xxd -r -p | plutil -convert json - -o -" ] )
}
使用我的帮助功能执行命令:
func shell(launchPath: String,arguments: [String]) -> String
{
let task = Process()
task.launchPath = launchPath
task.arguments = arguments
let pipe = Pipe()
task.standardOutput = pipe
task.standardError = pipe
do {
try task.run()
} catch let error as NSError {
print(error.localizedDescription)
return ""
}
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = String(data: data,encoding: .utf8) ?? ""
return output
}
这适用于参数的第一部分,直到管道符号。 使用额外的参数,错误是:
xattr: No such file: | xxd -r -p | plutil -convert json - -o -
我需要做什么才能使这成为要执行的完整语句?我不想创建命令文件,执行它,然后再次删除它。它应该像所有“正常”命令一样工作,并从 std io 传递返回文本,该文本将由我的 shell 函数获取。
我使用的是 Xcode 12.4 和 macOS 11.2。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。