【问题标题】:How to let Bash script extends User's PATH?如何让 Bash 脚本扩展用户的 PATH?
【发布时间】:2022-01-06 00:10:37
【问题描述】:

在命令行中,我的命令 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 映像

【问题讨论】:

  • 阅读 bash 手册页中的 INVOCATION 部分。它描述了 bash 登录 shell 处理了哪些文件。最有可能的是,PATH 在其中一个文件中设置为您观察到的值。您想将其作为登录 shell 运行的原因是什么?

标签: bash ubuntu


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    您可以只使用完整路径:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-03-17
        • 2013-11-16
        • 2021-06-17
        • 2020-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-27
        相关资源
        最近更新 更多