从脚本中获取 Swift 脚本的路径

Get path to Swift script from within script

我正在 Swift 中编写脚本,我希望它修改一些始终与脚本本身存在于同一目录中的文件。有没有办法从自身内部获取脚本的路径?我试过了:

print(Process.arguments)

但这只会输出实际提供给脚本的路径,它可能是完全解析的路径、文件名或介于两者之间的任何内容。

我打算将脚本 运行 与 swift /path/to/my/script.swift

就在swift:

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)
    }
}

已接受的答案在 Swift 3 中不起作用。此外,这是一种更直接的方法:

import Foundation

let currentDirectoryURL = URL(fileURLWithPath: FileManager.default.currentDirectoryPath)
let url = URL(fileURLWithPath: CommandLine.arguments[1], relativeTo: currentDirectoryURL)
print("script at: " + url.path)

但是,如果脚本的目录在您的 PATH 中,它会遇到 @rob-napier 指出的相同问题。