如何让 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
在命令行中,我的命令 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