bash 调用

来源:互联网 发布:螺纹梳刀编程 编辑:程序博客网 时间:2024/06/06 07:15

一个交互的shell,是一个启动时没有指定非选项参数,并且没有-c选项,其标准输入和错误都连接到了终端(在isatty(3)确定),或者启动时使用-i选项。PS1设置和$ - 包括我如果bash是交互的,允许一个shell脚本或者一个启动文件来测试这种状态。

下面的段落描述的bash如何执行它的启动文件。如果任何文件的存在,但不能被读取,bash报错。作为下在扩展部分波浪线扩展如下所述波浪线在文件名扩展。

当bash是作为交互的登录shell,或者作为非交互的shell与–login选项,它首先读取和从文件中执行命令/ etc / profile文件,该文件是否存在。读取该文件后,它会寻找在〜/ .bash_profile,〜/.bash_login文件,和〜/.profile文件,按照这个顺序,读取并执行从存在并且可读的第一个命令。当外壳被启动,以抑制这种行为可以使用–noprofile选项。

当一个登录shell退出时,bash读取并从文件〜/.bash_logout中执行命令,如果它存在。

当一个交互的shell这不是一个登录shell启动时,bash读取并/etc/bash.bashrc和〜/ .bashrc中执行命令,如果这些文件存在。这可以通过使用–norc选项被抑制。该文件–rcfile选项将强制bash读取和文件,而不是/etc/bash.bashrc和〜/ .bashrc中执行命令.

当bash启动非交互,运行shell脚本,例如,它会在环境变量BASH_ENV,如果它出现在那里,并使用扩展的值作为一个文件的名称,读取并执行扩展其价值。
bash的行为就好像是执行以下命令:
if [ -n “$BASH_ENV” ]; then. “$BASH_ENV”; fi
但PATH变量的值不用于搜索的文件名.

如果bash以名称sh启动,它试图模仿sh历史尽可能接近的启动行为,同时也遵循POSIX标准。

当作为交互式登录shell,或者使用–login选项非交互的shell启动,它首先尝试读取并执行从/ etc/ profile文件命令和〜/.profile文件,按照这个顺序。所述–noprofile选项可以被用于抑制这种行为。当使用名称sh的交互式的shell的时候,bash寻找变量ENV,扩展,如果它被定义它的值,并使用扩展后的值作为一个文件的名称,读取并执行。
名为sh启动的非交互的shell不会尝试读取任何其他启动文件。 当运行sh的时候,启动文件被读取后庆典进入POSIX模式。

bash 试图确定什么时候它正在与它连接到一个网络连接,当由远程shell守护程序执行作为标准输入运行,通常是sshd的,或安全shell守护进程sshd的。

如果bash的决定了它以这种方式被运行时,它读取和删除〜/ .bashrc和〜/ .bashrc中执行命令,如果这些文件存在并且是可读的。

如果shell启动的有效用户(组)ID不等于真正的用户(组)ID和-p选项没有提供,没有启动文件的读取,shell函数不会从环境中继承SHELLOPTS,BASHOPTS,CDPATH和GLOBIGNORE变量,如果它们出现在环境中,被忽略,有效用户ID设置为实际用户ID。如果-p选项在调用提供时,启动行为是相同的,但有效用户ID不会被重置。

0 0