【问题标题】:Bash script to append argument to $PATH将参数附加到 $PATH 的 Bash 脚本
【发布时间】:2017-08-16 14:26:45
【问题描述】:

如果参数还不是 $PATH 的一部分,我正在尝试编写尽可能简单的 bash 脚本,以将一个参数附加到 $PATH 环境变量。我知道还有其他简单的方法可以通过不使用 bash 脚本来做到这一点;但是,我想使用 bash 脚本。我已经尝试过export,但我没有任何运气。现在我的简单代码如下所示:

#!/bin/bash
if [[ "$(echo $PATH)" != *"$1"* ]]
then
PATH=$PATH:$1
fi

但是:

$ ./script /home/scripts
$ echo $PATH
(returns unaltered PATH)

【问题讨论】:

    标签: linux bash path environment-variables


    【解决方案1】:

    尝试使用 src 或 .:

    src ./script /home/scripts . ./script /home/scripts

    这是因为您的脚本在其自己的解释器上运行,并且该解释器实例(这是设置变量 $PATH 的位置)在脚本终止时终止。你必须让你的 当前 解释器来运行脚本(这就是 src 或 . 的用途)

    【讨论】:

    • 我正在查看 if 逻辑并完全忽略了这一点。对于它的价值,这个if 逻辑可能更好:if [ -d "$1" ] && ! echo $PATH | grep -E -q "(^|:)$1($|:)"
    • 如果有人阅读时发现正则表达式难以解析,它会专门寻找$1,它在它之前和之后,或者在开始时或$PATH 变量的末尾。因此,例如,如果 /bin/too 已经在路径中,您仍然可以将 /bin 添加到路径中,如果您不需要分隔符,则无法这样做。
    • 谢谢乔纳森。这是一个很好的观点。有没有办法通过实际调用命令而不是采购它来完成这项任务?
    • 我用这个:[[ -d "$HOME/.cargo/bin" && ":$PATH:" != *":$HOME/.cargo/bin:"* ]] && export PATH="$HOME/.cargo/bin:$PATH"(嗯,这是一个前置示例,您可以将新位置放在末尾追加)逻辑是“如果目录存在,并且它不在 PATH ,然后将其添加到 PATH。”使重新获取文件安全。
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多