在用户';通过带有命令mkdir~/adirectory的shell脚本创建主目录
我正在尝试使用shell脚本在用户的主目录中创建目录。脚本有以下行:在用户';通过带有命令mkdir~/adirectory的shell脚本创建主目录,shell,Shell,我正在尝试使用shell脚本在用户的主目录中创建目录。脚本有以下行: mkdir -p $path # where path=~/adirectory, path is obtained from env 但它不是在用户的主目录(即/home/auser/adirectory)中创建它,而是在当前工作目录中创建一个名为~的目录,并将adirectory放在其中 更新: 感谢乔纳森·莱夫勒的帮助。下面是我的代码的工作片段: function init() { if [ "$PROJECT_
mkdir -p $path # where path=~/adirectory, path is obtained from env
但它不是在用户的主目录(即/home/auser/adirectory
)中创建它,而是在当前工作目录中创建一个名为~
的目录,并将adirectory
放在其中
更新:
感谢乔纳森·莱夫勒的帮助。下面是我的代码的工作片段:
function init() {
if [ "$PROJECT_DIR" = "" ]; then
export PROJECT_DIR=$HOME/projects
fi
mkdir -p `expand $PROJECT_DIR`
}
function expand(){
echo `sh -c "echo $1"`
}
正如Jonathan Leffler指出的,问题在于
瓷砖扩展
。使用sh-c$path对我很有效。问题在于tilde扩展。使用sh-c$path对我很有效
function init() {
if [ "$PROJECT_DIR" = "" ]; then
export PROJECT_DIR=$HOME/projects
fi
mkdir -p `expand $PROJECT_DIR`
}
function expand(){
echo `sh -c "echo $1"`
}
哪个外壳,哪个系统?你说$path=~/adirectory
;你有没有看它有什么价值?分配应该是path=~/a目录
。在执行mkdir
命令之前,您会从echo“$path”
中得到什么?你还需要仔细检查,看看这是否能解释为什么你会得到你想要的结果(可能是这样)。请注意,外壳将展开(或不展开)~
mkdir
只是将其视为路径名的第一个字符,它是相对于当前目录的路径,因为它不是以/
开头的。我甚至尝试了mkdir-p$(echo$path),但它不起作用。请注意,/bin/sh
通常是伪装的bash
,但它可以是破折号或另一个外壳。使用Bash作为/bin/sh
更改其操作模式。波浪式展开发生在变量展开之前,因此如果变量值包含~
,则它保持为~
;这与最初的问题报告是一致的。但是,不清楚如何让echo$path给出完整的路径名,这与所声称的行为完全不一致。我们可以看到运行的结果吗:sh-x-c'path=“~/adirectory.v2”;回显“$path”;mkdir-p$path'
?选择的名称不同;它将创建~
目录,然后我们需要查看以下结果:sh-x-c'path=~/adirectory.v3;回显“$path”;mkdir-p$path'
也是。这将扩展分配中的~
,因此echo
应给出完整的路径名,并且应按预期创建目录(模块权限问题和/或预先存在)。如前所述,您的问题报告了该版本的行为,并在作业周围加了引号;然后,它声明该版本的行为,但在赋值周围不加引号。我想你可能对某些事情感到困惑,或者我对你正在做的事情感到非常困惑。正确的做法是根本不要在路径的值中使用~
。