我有一个程序,该程序接受将在其中创建文件的目标文件夹。我的程序应该能够处理绝对路径以及相对路径。我的问题是我不知道如何扩展~
到主目录。
我扩展目的地的功能如下所示。如果给定的路径是绝对路径,则不执行其他任何操作,否则它将相对路径与当前工作目录连接在一起。
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
目的地之类的信息,它将不会起作用。
我应该如何以跨平台的方式解决这个问题?
通常,~
外壳程序会 在 程序看到它 之前 将其展开。
调整程序与外壳扩展机制兼容的方式从命令行获取其参数的方式。
可能的问题之一是使用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”示例。
问题内容: 这是我的脚本: 在“ read caminho”中,我可能会从用户那里收到〜/ somefolder之类的路径。当脚本接收到这样的路径时,mv和mkdir都不会进行波浪号扩展,因此它将尝试创建〜/ somefolder而不是/ home / username / somefolder,因此失败。 如何确保将波浪号转换为HOME变量? 问题答案: 您可能需要评估该变量以正确替换它。一个例
问题内容: 在我的.sh文件中,我有此文件,而$ SOME_PATH导出为。但是,当我运行此.sh文件时,出现了错误消息,例如不存在这样的“〜/ path / to / path /”。 我将〜替换为$ HOME,然后错误消失了。那么代字号在这儿呢? 提前致谢。 问题答案: 采用 如果路径中有空格,请引用它
问题内容: 我试图让Android Studio启动器(studio.sh)使用手动安装的Java(而不是系统范围的默认Java)。由于我已经在.bashrc文件中声明了PATH和JAVA_HOME,因此我只是在shell脚本中提供了该文件: 。/home/foobar/.bashrc 但是由于某些原因,该脚本仍无法将$ JAVA_HOME / bin / java识别为可执行文件。 我添加了一些
问题内容: 搜索角色并不容易。我查看了一些CSS,发现了这个 这是什么意思? 问题答案: 该选择器实际上是[通用同级组合器(在选择器级别4中重命名为后续同级组合[器): 通用同级组合器由分隔两个简单选择器序列的“波浪号”(U+007E,〜)字符组成。这两个序列所表示的元素在文档树中共享相同的父对象,而第一个序列所表示的元素在第二个所表示的元素之前(不一定紧接)。 考虑以下示例: 与第4个和第5个列
问题内容: Python中的tilde运算符有什么用? 我能想到的一件事是在字符串或列表的两面都做一些事情,例如检查字符串是否为回文: 还有其他好的用法吗? 问题答案: 它是从C借来的一元运算符(采用单个参数),其中所有数据类型只是解释字节的不同方式。这是“取反”或“补码”操作,其中输入数据的所有位都取反。 在Python中,对于整数,该整数的二进制补码表示形式的位被颠倒(对于每个单独的位而言),
问题内容: 我一直以为并且是完全相同的,因此可以互换使用。今天,当我尝试在共享服务器上安装与memcached的python绑定 pylibmc时 ,使用的错误给了我,但没有给我 。我想说明原因。 libmemcached 是 pylibmc 的要求。我在主目录下安装了 libmemcached, 因为服务器上没有root。结果,要安装 pylibmc ,我需要确保安装脚本知道在哪里可以找到 li