【发布时间】:2014-08-07 11:03:25
【问题描述】:
我经常看到 PATH 变量是在脚本开头导出的。例如在 Debian Wheezy 中的 /etc/init.d/rc 脚本中:
PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH
虽然我知道这可以确保脚本中使用的可执行文件从正确的目录启动,但我不完全了解哪些 shell 会受到此 export 语句的影响。例如这里我在bash(PID 3987) 中启动名为rc(PID 6582; command is "/bin/sh /etc/init.d/rc") 的脚本:
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,因为父 shell(在我的示例中为 PID 为 3987 的 bash)不从子代继承变量?另外,我是否正确地在脚本rc 中执行的所有命令都在 /bin/sh 下以 PID 6582 启动,因此使用这个PATH=/sbin:/usr/sbin:/bin:/usr/bin 变量?如果是,那么简单的 PATH=/sbin:/usr/sbin:/bin:/usr/bin 还不够吗?
【问题讨论】:
标签: bash