我有一个程序,该程序接受将在其中创建文件的目标文件夹。我的程序应该能够处理绝对路径以及相对路径。我的问题是我不知道如何扩展~到主目录。
~
我扩展目的地的功能如下所示。如果给定的路径是绝对路径,则不执行其他任何操作,否则它将相对路径与当前工作目录连接在一起。
import "path" import "os" // var destination *String is the user input func expandPath() { if path.IsAbs(*destination) { return } cwd, err := os.Getwd() checkError(err) *destination = path.Join(cwd, *destination) }
由于path.Join不会扩展,~因此如果用户传递诸如~/Downloads目的地之类的信息,它将不会起作用。
path.Join
~/Downloads
我应该如何以跨平台的方式解决这个问题?
通常,~外壳程序会 在 程序看到它 之前 将其展开。 调整程序与外壳扩展机制兼容的方式从命令行获取其参数的方式。
可能的问题之一是使用exec.Command像这样:
cmd := exec.Command("some-binary", someArg) // say 'someArg' is "~/foo"
不会扩大。例如,您可以改为使用:
cmd := exec.Command("sh", "-c", fmt.Sprintf("'some-binary %q'", someArg))
它将~从外壳获得标准扩展。
编辑:修复了“ sh -c”示例。