首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash交互式和非交互式shell行为

Bash交互式和非交互式shell行为
EN

Stack Overflow用户
提问于 2013-04-23 14:00:10
回答 1查看 2.4K关注 0票数 0

我很难使用交互式和非交互式的shell。我不明白哪一个是哪一个。

例如,我读到过非交互式shells通常会在启动时检查BASH_ENV变量,并执行它所指向的任何内容。

因此,我所做的就是将BASH_ENV设置为指向某个只返回OK的脚本。然后我在终端中输入bash,这个脚本回显OK。但是为什么呢?我不是通过在终端中输入bash调用了另一个交互式shell吗?它为什么要执行bash_env?我在用linux薄荷玛雅。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-23 14:09:54

您唯一可以确定的是bash手册页(请参阅INVOCATION)中显示的内容-它详细列出了每个实例中运行的启动文件。

然而,没有什么能阻止(例如)运行通常不会运行的其他文件的启动文件。

举个例子,如果.bash_profile有下面这行:

代码语言:javascript
复制
. ~/.profile

它还将运行.profile脚本。

事实上,手册页上写着:

例如,当bash以非交互方式启动时,为了运行

脚本,它会在环境中查找变量BASH_ENV,如果变量出现在那里,则展开它的值,并使用展开的值作为要读取和执行的文件的名称。Bash的行为就像执行了以下命令:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

因此,如果您在~/.bash_profile这样的交互式shell的启动脚本中添加了这一行,那么您还将获得BASH_ENV所指向的文件。

最好的办法是检查调用部分,找出哪些文件将运行,然后跟踪它们(在脚本的顶部使用类似set -x的内容),看看从哪里调用了哪些文件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16162032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档