在 bash 函数中运行 cd 时没有这样的文件或目录,且路径确实正确

在 bash 函数中运行 cd 时没有这样的文件或目录,且路径确实正确

所以我对 Bash 的了解不多,但我一直被这个问题难住了。该switchto功能是为我提供了一种在命令行上在项目之间跳转的简单方法。

source ~/.profile
export PATH=~/bin:$PATH
export PATH=~/.composer/vendor/bin:$PATH
alias composer="php /usr/local/bin/composer.phar"

switchto () (
        cd "~/Projects/$1.com/wp-content/themes/$1"
)

一切对我来说似乎都是对的,但它总是说如果我跑步,例如switchto example

-bash: cd: ~/Projects/example.com/wp-content/themes/example: No such file or directory

我已经再三验证该目录确实存在。我是 bash 新手,所以我不确定这是否是我做错的简单事情?

答案1

如果被引用,您的波形符~不会扩展到您的主目录。

https://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html

Tilde Expansion

如果单词以不带引号的波形符 ( ~) 开头,则直到第一个不带引号的斜杠之前的所有字符(或所有字符,如果没有不带引号的斜杠)都将被视为波形符前缀。如果波形符前缀中的任何字符都没有被引用,则波形符前缀中跟随波形符的字符将被视为可能的字符登录名。如果此登录名是空字符串,则波浪号将替换为 shell 变量的值HOME。如果HOME未设置,则会替换执行 shell 的用户的主目录。否则,波形符前缀将替换为与指定登录名关联的主目录。

所以你可以使用(带花括号):

switchto () {
    cd ~/"Projects/$1.com/wp-content/themes/$1"
}

你可以将你的两个PATH定义与

  export PATH=~/bin:~/.composer/vendor/bin:$PATH

相关内容