如何让 Bash 脚本扩展用户的路径?

How to let Bash script extends User's PATH?

在命令行中,我的命令 python3 -u jupterlab notebook 完美运行,因为 python 位于 /srv/conda/envs/notebook/bin/python3

接下来,我有一个bash脚本,比如说/usr/local/share/python3-login,它的内容是

#!/bin/bash -l
echo $PATH
exec python3 -u "$@"

我的问题是当我调用脚本时,我遇到了 python3 not found /usr/local/share/python3-login: line 3: exec: python3: not found

的错误

我尝试通过在第 2 行添加 echo $PATH 进行调试,结果发现 PATH 是 /opt/conda/condabin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/game,python3 不存在

如何让我的 bash 脚本识别 /srv/conda/envs/notebook/bin/python3

为了添加更多上下文,我用 Ubuntu OS

构建了一个 docker 图像

-l Make bash act as if it had been invoked as a login shell 这意味着它将加载各种配置文件,就像您刚刚登录一样

由于 /srv/conda/envs/notebook/bin 看起来不像在配置文件中看到的标准路径,我怀疑您首先做了更多的事情来将其放入您的 $PATH 中。

解决方案 1:只需将在您的环境中获取此路径所做的任何操作添加到脚本中即可。

解决方案 2:不要在您的 shebang 中使用 -l 参数。

您可以只使用完整路径:

#!/bin/bash -l
echo $PATH
exec /srv/conda/envs/notebook/bin/python3 -u "$@"

要扩展用户路径,请修改 PATH 环境变量。

export PATH=/srv/conda/envs/notebook/bin/python3:$PATH