我很难使用交互式和非交互式的shell。我不明白哪一个是哪一个。
例如,我读到过非交互式shells通常会在启动时检查BASH_ENV变量,并执行它所指向的任何内容。
因此,我所做的就是将BASH_ENV设置为指向某个只返回OK的脚本。然后我在终端中输入bash,这个脚本回显OK。但是为什么呢?我不是通过在终端中输入bash调用了另一个交互式shell吗?它为什么要执行bash_env?我在用linux薄荷玛雅。
发布于 2013-04-23 14:09:54
您唯一可以确定的是bash手册页(请参阅INVOCATION)中显示的内容-它详细列出了每个实例中运行的启动文件。
然而,没有什么能阻止(例如)运行通常不会运行的其他文件的启动文件。
举个例子,如果.bash_profile有下面这行:
. ~/.profile它还将运行.profile脚本。
事实上,手册页上写着:
例如,当bash以非交互方式启动时,为了运行
脚本,它会在环境中查找变量BASH_ENV,如果变量出现在那里,则展开它的值,并使用展开的值作为要读取和执行的文件的名称。Bash的行为就像执行了以下命令:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
因此,如果您在~/.bash_profile这样的交互式shell的启动脚本中添加了这一行,那么您还将获得BASH_ENV所指向的文件。
最好的办法是检查调用部分,找出哪些文件将运行,然后跟踪它们(在脚本的顶部使用类似set -x的内容),看看从哪里调用了哪些文件。
https://stackoverflow.com/questions/16162032
复制相似问题