如何使用 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; }
我有以下(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; }