2016-07-23 65 views
1

创建Bash脚本时,我在开始定义PATH环境变量时一直有一条线。我最近发现,这不会使脚本非常便于使用,因为对于不同版本的Linux,PATH变量是不同的(在我的情况下,我将脚本从Arch Linux移动到了Ubuntu并收到错误,因为各种可执行文件并不相同地方)。将PATH环境变量导入到使用cron启动的Bash脚本中

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


编辑: 我看到我的问题已经引起导致一些思考,我想改变登录shell的PATH环境变量有一个bash脚本,这是完全相反的一些困惑是什么我想要。

这是我现在有在我的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不同:

[email protected]_router:~$ cat output.txt 
/usr/bin:/bin 
[email protected]_router:~$ echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games 
+3

你为什么要这么做? –

+1

在Mac OS X上,'/ etc/profile'包含:'if [-x/usr/libexec/path_helper];然后评估'/ usr/libexec/path_helper -s'; fi'。这设置了'PATH'和'MANPATH'。您可以在U&L和SU上找到关于'path_helper'的问题 - 所提到的速度问题已经解决(少数 - 如10.11.6中的8-10毫秒)。在'/ etc/paths.d'中查找可能在Linux上?但问题在于 - 你为什么要修改PATH?我可能对我应该使用哪个版本的命令有自己的看法;这就是我的PATH设置。当然,如果我打破了你的剧本,责任就在我身上解决它。 –

+0

恐怕你们两个都误解了我的要求。我编辑了我的问题,希望能够澄清事情。 – XJDHDR

回答

3

不要触碰用户的PATH可言,除非你有特殊原因。没有做任何事情会(基本上)完成你所要求的。

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

如果你需要一些非标准添加到PATH,通常的做法是冠以(或附加)新的目录到用户现有的PATH,像这样:

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

cron工作环境是非常接近系统的“默认”(对于“默认”的一些定义),尽管交互式shell通常可以在较少约束的环境下运行。但是,再次解决这个问题的方法是在脚本的开头添加缺失的目录到当前值。添加这个特定系统上不存在的目录是无害的,正如引入重复目录一样。

+0

您误解了我的问题。我不想修改'PATH'环境变量。我想将该环境变量的值复制到脚本的环境中。 – XJDHDR

+0

我相信我完全理解你;如果你什么都不做,你会继承用户的'PATH',在大多数情况下它将与系统默认的'PATH'相同,如果不是,用户很可能有一个很好的理由来配置它。无论如何,没有必要在整个系统范围内设置默认值,尽管这是常见的做法,例如,在Linux上。如果您确实需要覆盖用户的配置偏好,我所描述的机制就是您应该做的,而不是您想要的。 – tripleee

+0

我已经编辑了我的问题。我刚刚意识到有一个我忘记提到的非常重要的信息。我非常抱歉。 – XJDHDR