gpt4 book ai didi

linux - 将 PATH 环境变量导入到使用 cron 启动的 Bash 脚本中

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:48:32 25 4
gpt4 key购买 nike

在创建 Bash 脚本时,我总是在开头有一行定义 PATH 环境变量。我最近发现这不会使脚本非常便携,因为 PATH 变量对于不同版本的 Linux 是不同的(在我的例子中,我将脚本从 Arch Linux 移动到 Ubuntu 并收到各种错误可执行文件不在同一个地方)。

是否可以将登录shell定义的PATH环境变量复制到当前的Bash脚本中?


编辑:我发现我的问题引起了一些困惑,导致一些人认为我想用 bash 脚本更改登录 shell 的 PATH 环境变量,这与我想要的完全相反。

这是我目前在我的一个 Bash 脚本顶部的内容:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
# Test if an internet connection is present
wget -O /dev/null google.com

我想将第二行替换为复制 PATH 的值登录shell > 脚本环境:

#!/bin/bash
PATH=$(command that copies value of PATH from login shell)
# Test if an internet connection is present
wget -O /dev/null google.com

编辑 2:对于我的重大疏漏,深表歉意。我忘了提到有问题的脚本是通过 cron 按计划运行的。 Cron 创建自己的脚本运行环境,不使用或修改登录 shell 的环境变量。我刚刚尝试在 cron 中运行以下脚本:

#!/bin/bash
echo $PATH >> /home/user/output.txt

结果如下。如您所见,cron 使用的 PATH 变量与登录 shell 不同:

user@ubuntu_router:~$ cat output.txt
/usr/bin:/bin
user@ubuntu_router:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

最佳答案

除非您有特定原因,否则根本不要触及用户的 PATH。什么都不做将(基本上)完成您的要求。

您无需执行任何操作即可获取用户的正常 PATH,因为每个进程都会自动继承 PATH 和所有其他环境变量。

如果您需要向 PATH 添加一些非标准内容,通常的方法是将新目录添加(或附加)到用户现有的 PATH 中,如下所示:

PATH=/opt/your/random/dir:$PATH

cron 作业的环境非常接近系统的“默认”(对于“默认”的某些定义),尽管交互式 shell 通常可以在受限较少的环境中运行。但同样,解决该问题的方法是将任何缺失的目录添加到脚本开头的当前值。添加此特定系统上不存在的目录是无害的,引入重复目录也是如此。

关于linux - 将 PATH 环境变量导入到使用 cron 启动的 Bash 脚本中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38538029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com