Swift 从本机osx应用程序调用的Bash脚本产生错误;“不允许操作”; 我想做什么
从本机osx应用程序调用bash脚本,将mac上的本地目录同步到远程服务器 bash脚本使用以下库:Swift 从本机osx应用程序调用的Bash脚本产生错误;“不允许操作”; 我想做什么,swift,xcode,bash,macos,Swift,Xcode,Bash,Macos,从本机osx应用程序调用bash脚本,将mac上的本地目录同步到远程服务器 bash脚本使用以下库: 应用程序控制台上的错误消息: watch.sh:第4行:/usr/local/bin/rsync:不允许操作 watch.sh:第6行:/usr/local/bin/fswatch:不允许操作 我所做的 我已经在终端的应用程序外运行了脚本,它工作得很好 我已尝试禁用和启用系统完整性保护,但对错误没有影响 我试着从python脚本调用Bash脚本,它没有任何错误 代码 OSX应用程序代
- 我已经在终端的应用程序外运行了脚本,它工作得很好
- 我已尝试禁用和启用
,但对错误没有影响系统完整性保护
- 我试着从python脚本调用Bash脚本,它没有任何错误李>
你的应用程序沙盒了吗?@Daskwuff我想这就是问题所在。我不确定如何确切地关闭沙盒模式,但我构建了一个应用程序的发布版本,当在xcode之外运行应用程序时,它似乎可以工作。如果你想发布一个答案,我很乐意接受并结束这个问题。
//////////////////////////////////////////
// FUNCTION - VIEW DID LOAD
override func viewDidLoad() {
super.viewDidLoad()
command(args: "sh","watch.sh")
} // END - FUNCTION
////////////////////////////////////////////
// FUNCTION - COMMAND
func command(args: String...) {
// GET SCRIPTS PATH
let scriptsDir = Bundle.main.resourceURL!.appendingPathComponent("scripts").path
// CREATE A PROCESS INSTANCE
let process = Process()
// SET THE PROCESS PARAMETERS
process.launchPath = "/usr/bin/env"
process.currentDirectoryPath = scriptsDir
process.arguments = args
// CREATE A PIPE AND MAKE THE PROCESS
// PUT ALL THE OUTPUT THERE
let pipe = Pipe()
process.standardOutput = pipe
// LAUNCH THE PROCESS
process.launch()
// GET THE DATA
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
print(output!)
} // END - FUNCTION
#!/bin/bash
/usr/local/bin/rsync --rsh="/usr/local/bin/sshpass -p ************* ssh -l username" -azP --delete "/path/to/local" username@111.111.111.111:/path/to/remote
/usr/local/bin/fswatch -o "/path/to/local" | while read f; do
/usr/local/bin/rsync --rsh="/usr/local/bin/sshpass -p ************* ssh -l username" -azP --delete "/path/to/local" username@111.111.111.111:/path/to/remote
done