如何使用 bash 函数更改源

How change source with a bash function

我有以下(bash)功能可以快速更改虚拟环境:

changeEnv() { "source ~/VirtualEnvironments//bin/activate"; }

当我 运行 它与

changeEnv my_env

我明白了

-bash: source ~/VirtualEnvironments/my_env/bin/activate: No such file or directory

但是如果我运行

source ~/VirtualEnvironments/my_env/bin/activate

有效。所以我知道它到达了正确的地方。

我认为这可能与评估 $1 的时间有关,但我真的不知道为什么看似简单的东西不起作用。

当您用 space 将字符串括起来时,您将该字符串变成 shell 中的单个单词。

命令中的第一个单词被视为 运行 的命令。因此,当您将整个命令放入 space 时,您是在告诉 shell 查找像 source ~/VirtualEnvironments/my_env/bin/activate 和 space 和 ~ 作为命令文件名的一部分 .

因为那些不是文件名的一部分,而是语法(在第一种情况下,旨在分隔单词;在第二种情况下,旨在替换为用户的主目录),它们需要不带引号:

请注意,我们在这里唯一引用的是 </code>——这样我们确保即使您的环境名称包含 spaces 或通配符,也只有一个参数(仅shell 语法中的单个 "word")在命令名称 <code>source.

之后传递
changeEnv() { source ~/VirtualEnvironments/""/bin/activate; }