Swift'de bir komut dosyası yazıyorum ve bu betiğin kendisi ile aynı dizinde bulunan bazı dosyaları değiştirmek istiyorum. Senaryonun içinden kendi yolunu bulmanın bir yolu var mı? Denedim:Komut dosyasından Swift komut dosyasının yolunu alın
print(Process.arguments)
Ama bu aslında aradaki tam olarak çözümlenmiş yolu, sadece dosya adını, ya da bir şey olabilir senaryo, verildi sadece yolunu çıkarır.
Komut dosyasının swift /path/to/my/script.swift
ile çalıştırılmasını istiyorum.
let cwd = FileManager.default.currentDirectoryPath
print("script run from:\n" + cwd)
let script = CommandLine.arguments[0];
print("\n\nfilepath given to script:\n" + script)
//get script working dir
if script.hasPrefix("/") { //absolute
let path = (script as NSString).deletingLastPathComponent
print("\n\nscript at:\n" + path)
} else {
let urlCwd = URL(fileURLWithPath: cwd)
if let path = URL(string: script, relativeTo: urlCwd)?.path {
let path = (path as NSString).deletingLastPathComponent
print("\n\nscript at:\n" + path)
}
}
Kullanım # kullanın, bu başarısız olur unutmayın! ve bu PATH'da (ancak OP'nin betiği çalıştırmak için söylediği şekilde eşleşiyor, yani sorun yok) –
@RobNapier ne demek istiyorsun? Üstte "#!/Usr/bin/env swift" var, ama bu benim $ PATH'imde değil –
demek istiyorum. Eğer PATCH'inizde, eğer sadece "script.swift" yazıyorsa betik şu anda içinde bulunduğunuz dizinde olup olmadığına bakın. –