はHow do I run an terminal command in a swift script? (e.g. xcodebuild)からコピー:プロセスに環境変数を設定するにはどうすればよいですか?
import Foundation
@discardableResult
func shell(_ args: String...) -> Int32 {
let task = Process()
task.launchPath = "/usr/bin/env"
task.arguments = args
task.launch()
task.waitUntilExit()
return task.terminationStatus
}
shell("ls")
shell("xcodebuild", "-workspace", "myApp.xcworkspace")
これがきちんと見えます。私はちょうど$PWD
のような環境変数がプロセスのためにどのように設定できるのだろうかと疑問に思っています(task
ここに...)。
私は次のことを試してみました:
import Foundation
@discardableResult
func execCommand(_ args: String...) -> Int32 {
let process = Process()
process.launchPath = "/usr/bin/env"
process.environment = ["PWD": "/Users"]
if let env = process.environment {
print(env["PWD"] ?? "Unknown")
} else {
print("Environment not available!")
}
process.arguments = args
process.launch()
process.waitUntilExit()
return process.terminationStatus
}
execCommand("pwd")
そして、これらの線が印刷されました:
/Users
/private/tmp/AppIcon.appiconset
はどうやら環境変数が設定されていますが、すべてでpwdコマンドには影響しません。
別のアプローチ:前と
import Foundation
@discardableResult
func execCommand(_ args: String...) -> Int32 {
let process = Process()
process.launchPath = "/usr/bin/env"
var environment = ProcessInfo.processInfo.environment
environment["PWD"] = "/Users" //optionally set new vars, or overwrite old ones
process.environment = environment
if let env = process.environment {
print(env["PWD"] ?? "Unknown")
} else {
print("Environment not available!")
}
process.arguments = args
process.launch()
process.waitUntilExit()
return process.terminationStatus
}
execCommand("pwd")
残念ながら同じ結果。
https://developer.apple.com/reference/foundation/process/1409412-environment – Alexander
あなたは 'Process'インスタンス' task'呼び出すべきではありません。 'NSTask'の名前が変更されました。 – Alexander