在swift中使用Process()表示崩溃时获取运行时错误

在swift中使用Process()表示崩溃时获取运行时错误,swift,bash,Swift,Bash,我有一个如下所示的代码: let process = Process() process.launchPath = "/bin/sh" process.arguments = ["symbolicatecrash", "crash.crash"] let pipe = Pipe() process.standardOutput = pipe process.launch() let data = pipe.fileHandleForRe

我有一个如下所示的代码:

    let process = Process()
    process.launchPath = "/bin/sh"
    process.arguments = ["symbolicatecrash", "crash.crash"]

    let pipe = Pipe()
    process.standardOutput = pipe
    process.launch()

    let data = pipe.fileHandleForReading.readDataToEndOfFile()
    let output: String = String.init(data: data, encoding: .utf8)!
但是,我得到了这个错误

symbolicatecrash: line 14: use: command not found
symbolicatecrash: line 15: use: command not found
symbolicatecrash: line 16: use: command not found
symbolicatecrash: line 17: syntax error near unexpected token `('
symbolicatecrash: line 17: `use Cwd qw(realpath);'
Swift执行当前进程的目录中同时存在SYMBOLATE脚本和crash.crash。因此,
Process()
可以很好地访问它们


这个错误意味着什么?有什么可能解决这个问题?

分析您所引用的脚本会发现它是一个Perl脚本。但是,您告诉
Process
运行一个shell脚本(
Process.launchPath=“/bin/sh”
),这就是为什么它不能工作的原因

launchPath
设置为脚本的路径应该是这样的:

process.launchPath = "/path/to/symbolicatecrash"
process.arguments = ["crash.crash"]
如果可以直接从命令行调用脚本,则无需指定要使用的解释器(
/bin/bash
,在您的示例中是
/usr/bin/perl
)。在
symbolicatecrash
的情况下,脚本可直接执行,因为它在脚本的“shebang”行中正确指定了解释器:

#!/usr/bin/perl -w

看起来好像
symbolicatecrash
是一个包含许多错误的shell脚本。你能在这里展示一下它的内容吗?这是一个苹果脚本。如果你有mac,你可以在这里找到它:
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash
这是“苹果”写的脚本。不是“AppleScript”对不起,你说得对。然而,它不是AppleScript也不是Bash,而是一个Perl脚本。所以,这也是为什么你的方法无法奏效的原因。我会更新我的答案。这是“苹果”写的脚本。