我创建了一个应用程序,将我的所有iMessages导出到我用于日记的应用程序中。它访问Libary / Messages /中的chat.db文件来执行此操作。这部分效果很好
我被要求使用框架,命令行工具不允许您在macOS中捆绑框架。我本来希望这一切都是一个脚本并完全避免使用Cocoa,但由于需要捆绑的框架,因此需要使用完整的Cocoa应用程序
我可以输入pwd
之类的命令并获得回复。但是,当我尝试运行日记应用程序的终端命令时,它会因“找不到命令”而失败
如果我在终端内运行完全相同的命令,或者从Xcode中的Swift命令行工具中运行完全相同的命令,它就可以运行。但是,现在我正在使用一个实际的Cocoa应用程序,它将无法正常工作。
以下是我的代码示例:
let pipe = Pipe()
let task = Process()
task.launchPath = "/bin/sh"
task.arguments = ["-c", String(format:"%@", "dayone2 new 'Hello'")]
task.standardOutput = pipe
let file = pipe.fileHandleForReading
task.launch()
if let result = NSString(data: file.readDataToEndOfFile(), encoding: String.Encoding.utf8.rawValue) {
return result as String
}
else {
return "--- Error running command - Unable to initialize string from file data ---"
}
和回应:
/bin/sh: dayone2: command not found
答案 0 :(得分:1)
添加"--login"
作为第一个任务参数:
task.arguments = ["--login", "-c", "dayone2 new 'Hello'"]
这应该可以解决您的错误。
说明:
运行终端时,shell从man sh
:
当bash被调用为交互式登录shell时,或者作为 具有
--login
选项的非交互式shell,如果该文件存在,它首先从文件/etc/profile
读取并执行命令。读取该文件后,它会按顺序查找~/.bash_profile
,~/.bash_login
和~/.profile
,并从第一个存在且可读的命令中读取和执行命令。
这些文件中的命令通常设置$PATH
环境变量,该变量定义shell用于查找命令的搜索路径。
当您在终端中运行命令行工具时,它会继承此环境变量,然后将其传递给它调用的shell以运行dayone2
命令。
运行GUI应用程序时,没有底层shell,$PATH
变量设置为系统默认值。您的错误“未找到命令”表示您的dayone2
命令不在默认路径上。
HTH