gpt4 book ai didi

macos - ~/.bash_profile 别名中 pwd 的不同评估取决于引用类型

转载 作者:行者123 更新时间:2023-12-02 09:23:43 29 4
gpt4 key购买 nike

这是在 OSX El Capitan 上发生的,但也发生在我的 Ubuntu 别名中。

我为将工作目录传递给 docker 容器而创建的别名遇到了问题。

这行不通(无论我在哪个目录中,$(pwd) 总是传递 ~/Users/username):

alias phpqa="docker run --rm -u $UID -v $(pwd):/app eko3alpha/docker-phpqa"

作品:

alias phpqa='docker run --rm -u $UID -v $(pwd):/app eko3alpha/docker-phpqa'

但是,当传入错误的路径时,我的脚本开始出现意外错误。所以我做了一个实验。我将这两个别名添加到我的 ~/.bash_profile 中。

alias getpath="echo $(pwd)"
alias getpath2='echo $(pwd)'

我注销然后重新登录。

更改目录:

$ cd /Users/username/correct/path/to/project

执行两个别名:

$ getpath
/Users/username

$ getpath2
/Users/username/correct/path/to/project

带双引号的别名总是返回用户主目录,而带单引号的别名返回当前目录。有人可以解释为什么会这样吗?

最佳答案

别名定义像任何其他命令一样被解析。在双引号内,变量替换如 $UID 和命令替换如 $(pwd) 被展开。在单引号内,没有展开任何内容:唯一的特殊字符是终止单引号文字的单引号。

alias phpqa="docker run --rm -u $UID -v $(pwd):/app eko3alpha/docker-phpqa"

假设你的用户 ID 是 1000 并且当前目录是你的主目录 /Users/username 在你的 .bash_profile 被读取时,这定义了别名 phpqa 扩展 docker run --rm -u 1000 -v/Users/username:/app eko3alpha/docker-phpqa.

alias phpqa='docker run --rm -u $UID -v $(pwd):/app eko3alpha/docker-phpqa'

这定义了别名 phpqa 扩展 docker run --rm -u $UID -v $(pwd):/app eko3alpha/docker-phpqa。每次扩展别名时,它都会被相应的字符串替换,并且该字符串遵循通常的 shell 解析规则。因此每次使用别名时,都会使用变量 UID 的当前值并执行命令 pwd

这个别名的正确定义是

alias phpqa='docker run --rm -u "$UID" -v "$PWD:/app" eko3alpha/docker-phpqa'

Always use double quotes around variable and command substitutions unless you know that you need to omit them . $PWD$(pwd) 是等效的(shell 在变量 PWD 中跟踪当前目录)。

或者,忘记引用(除了替换周围的双引号)并使用函数。

phpqa () {
docker run --rm -u "$UID" -v "$PWD:/app" eko3alpha/docker-phpqa "$@"
}

关于macos - ~/.bash_profile 别名中 pwd 的不同评估取决于引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39602584/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com