在bash脚本的开头了解PATH变量导出

马丁

我经常看到在脚本的开头导出了PATH变量。例如在/etc/init.d/rcDebian Wheezy中的脚本中:

PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH

虽然我知道这可以确保脚本中使用的可执行文件从正确的目录启动,但是我还不完全了解该export语句会影响哪些外壳程序例如,在这里我启动(PID 3987)中名为rc(PID 6582;命令为“ / bin / sh /etc/init.d/rc”)的脚本bash

init(1)-+-acpid(1926)
        |-sshd(2139)-+-sshd(2375)---bash(2448)---screen(3393)---screen(3394)-+-bash(3395)---vim(3974)
        |            |                                                       |-bash(3397)---pstree(6584)
        |            |                                                       `-bash(3987)---rc(6582)---sleep(6583)

我是否正确说明rc脚本中的此PATH导出语句仅影响PID为6582的/ bin / sh,因为父级外壳程序(在我的示例中为PID 3987的bash)不会从子级继承变量?另外,我是否纠正了脚本rc执行的所有命令都在带有PID 6582的/ bin / sh下启动并因此使用了此PATH=/sbin:/usr/sbin:/bin:/usr/bin变量?如果是,那么简单的PATH = / sbin:/ usr / sbin:/ bin:/ usr / bin就足够了吗?

Marcos Dione

环境变量由脚本运行的所有进程继承。PATH特别是会影响C函数execlp()的行为execvp(),因此init.d,启动脚本所启动的所有进程sshd及其后代都会受到影响,但只会影响到这些后代之一更改并导出它的时刻。

特别是,bash(2448)很可能更改它(因为它是登录外壳程序)以匹配系统和用户的配置,因此它的所有后代都受到此更改的影响。

然后,当您手动运行/etc/init.d/rc脚本时,该更改将由该sleep命令继承(但是该更改永远不会尝试运行)。

如果是,那么简单的PATH = / sbin:/ usr / sbin:/ bin:/ usr / bin就足够了吗?

如果您只是设置变量而不是导出变量,则取决于rc脚本的运行方式。如果它启动任何尝试使用这些功能中的任何一个运行命令的程序,则否,只有在导出后PATH才会影响子级。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

只读以bash传递给脚本的变量开头的行

来自分类Dev

.bash_profile中`PATH`导出的末尾或开头的$ PATH(对于Mac上的Git)

来自分类Dev

从bash脚本将变量重新导出到环境

来自分类Dev

为什么我的bash脚本不能导出变量?

来自分类Dev

Bash 源 + npm 脚本函数未导出但变量是

来自分类Dev

了解bash脚本语法

来自分类Dev

在shell脚本中“导出”变量

来自分类Dev

将变量导出到另一个bash脚本

来自分类Dev

使用bash脚本导出的环境变量无法在python中访问

来自分类Dev

在bash中,退出脚本而不退出外壳,或者从子外壳中导出/设置变量

来自分类Dev

将变量导出到另一个bash脚本

来自分类Dev

连接到 mysql db 并执行查询并将结果导出到变量 - bash 脚本

来自分类Dev

Bash导出变量逐行接收

来自分类Dev

bash导出未设置变量

来自分类Dev

Bash '导出环境变量

来自分类Dev

bash 脚本创建脚本变量

来自分类Dev

将变量从一个Shell脚本导出到bash中的另一个脚本

来自分类Dev

将变量从一个Shell脚本导出到bash中的另一个脚本

来自分类Dev

Bash脚本变量位置

来自分类Dev

Bash脚本变量位置

来自分类Dev

Bash脚本-嵌套变量

来自分类Dev

了解何时在bash脚本中使用空格

来自分类Dev

了解bash脚本中的grep模式

来自分类Dev

在Shell脚本中导出路径变量

来自分类Dev

在Shell脚本中导出路径变量

来自分类Dev

在 shell 脚本中导出因变量失败

来自分类Dev

了解 PATH 环境变量的工作原理

来自分类Dev

以“-e”开头的 Bash 变量不存储

来自分类Dev

导出环境变量的脚本无法导出它们