交互式shell与非交互式shell

首先一点是明确的:/etc/profile是设置所有用户的环境变量的配置文件,/home/omm/.profile是针对特定的用户设置环境变量的配置文件(omm用户)。

但是重要的区别是:/etc/profile并不是每次都会加载的。它要区分login,non-login,interactive和non-interactive 模式的情况。

login 代表用户登入, 比如使用 "su -" 命令, 或者用 ssh 连接到某一个服务器上, 都会使用该用户默认 shell 启动 login shell 模式。该模式下的 shell 会去自动执行 /etc/profile 和 ~/.profile 文件。

no-login shell 的情况是我们在终端下直接输入 bash 或者 bash -c "CMD" 来启动的 shell。该模式下是不会自动去运行任何的 profile 文件。

interactive shell 是交互式shell, 顾名思义就是用来和用户交互的, 提供了命令提示符可以输入命令。

non-interactive shell 则一般是通过 bash -c "CMD" 来执行的bash。

SSH login或者 sudo或者su - [USER] 命令都是是典型的 interactive login shell

但是ssh server CMD执行的命令或通过程序执行远程的命令,理论上应该既是non-interactive non-login(非交互也是非登入的),它是不会执行/etc/profile的。

图1

可以参考一下资料:

https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

https://www.gnu.org/software/bash/manual/html_node/Interactive-Shells.html#Interactive-Shells

https://wido.me/sunteya/understand-bashrc-and-profile

http://www.cnblogs.com/qcly/p/3273373.html

了解了上述场景,那么就比较清晰。

内存的问题是由于调用了curl命令导致的。其调用顺序如下:

Controller -> ssh -> bash -> nodeagent -> hdfs-service-check.sh -> curl

由于controller是通过ssh调用启动nodeagent的,通过前面的描述可以知道,它是一个非交互式的非登入式的shell,

将不会调用加载/etc/profile,这就导致了nodeagent没有NSS这个环境变量,nodeagent调用hdfs-service-check.sh,

因为子进程继承父进程的环境变量的缘故,所以hdfs-service-check.sh也没有NSS环境变量,所以curl命令仍然存在

内存的问题。

那么为什么将NSS变量加在/home/omm/.profile中就可以了呢?

那是因为FusionInsight主动显式地调用了加载了这个文件。

从下面的这张调用关系图也可以看出在启动nodeagent时显式地加载了/home/omm/.profile文件:

图2

时间: 2024-12-14 23:57:53

交互式shell与非交互式shell的相关文章

交互式shell和非交互式shell、登录shell和非登录shell的区别

交互式shell和非交互式shell.登录shell和非登录shell的区别.首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录. 交互式shell和非交互式shell(interactive shell and non-interactive shell)交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令.这种模式被称作交互式是因为shell与用户进行交互.这种模式也是大多数用户非常熟悉的:登录.执行一些命令.退出.当你退出后,shell也终止了.s

交互式与非交互式,登录shell与非登录shell

交互式shell和非交互式shell.登录shell和非登录shell的区别.首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录. 交互式shell和非交互式shell(interactive shell and non-interactive shell)交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令.这种模式被称作交互式是因为shell与用户进行交互.这种模式也是大多数用户非常熟悉的:登录.执行一些命令.退出.当你退出后,shell也终止了.s

登录shell与非登录shell读取文件过程

登录shell与非登录shell读取文件过程登录:/etc/profile→/etc/profile.d/*.sh        ~/.bash_profile非登录:~/.bash_profile→~/.basfrc→/etc/bashrc#soure .bash_profile        手动更新/etc/profile            通用的有效环境变量/etc/profile.d/*.sh    软件包特有的环境变量~/.bash_profile        用户特有的环境变

交互式shell和非交互式shell的区别

交互式模式就是shell等待你的输入,并且执行你提交的命令.这种模式被称作交互式是因为shell与用户进行交互.这种模式也是大多数用户非常熟悉的:登录.执行一些命令.签退.当你签退后,shell也终止了.shell也可以运行在另外一种模式:非交互式模式.在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们.当它读到文件的结尾,shell也就终止了.

shell脚本分为三类:登录脚本、交互式脚本、非交互式脚本

一. 登录脚本类似于windows下的计算机设置中的登录脚本和账户设置下的登录脚本的合集(我是这么理解的哈). 其配置文件的关键词为prefile,它有以下几个关键配置文件: /etc/prefile 这个是计算机脚本; [$home/.prefile ; $home/.bash_prefile ; $home/.bash_login]这三个是账户脚本,根据不同发行版名字不同(坑爹的linux) ; 说明:/etc/prefile之所以这么牛逼,应该与其内部含有export有关,export定义

登录shell和非登录shell

/bin/bash ,/bin/sh ,/bin/csh -- 一般Linux默认的用户shell都是bash ,也就是说你可以登录进去敲命令. 非登陆shell ,经典的 /bin/nologin 就是一个非登陆shell,也就是说如果一个用户默认的shell是它的话,这个用户即使登录进Linux也不无法使用Linux. ================= shell是用户和计算机交流的中介,"登录shell"保证用户和计算机交流,"非登陆shell"无法让用户与

登录式与非登录式&交互式与非交互式shell及其环境初始化过程

交互式shell和非交互式shell(interactive shell and non-interactive shell) 交互式模式就是在终端上执行,shell等待你的输入,并且立即执行你提交的命令.这种模式被称作交互式是因为shell与用户进行交互.这种模式也是大多数用户非常熟悉的:登录.执行一些命令.退出.当你退出后,shell也终止了. shell也可以运行在另外一种模式:非交互式模式,以shell script(非交互)方式执行.在这种模式 下,shell不与你进行交互,而是读取存

/etc/profile与/etc/bashrc、交互式与非交互式、login与non-login shell的区别

线上的memcached又挂了,仍然没有得到core文件.排查原因,同事发现启动memcached的脚本存在可疑问题. 问题一:没有设置memcached工作目录,有可能core dump时没有工作目录写权限 这些脚本由crontab启动.脚本中没有设置工作目录,而这是非root用户的crontab.启动memcached时,工作目录不是memcached可执行文件所在目录.实验证明,这个是用户的home目录,crontab运行的脚本中打印pwd,结果是"home/work",work

/etc/profile与/etc/bashrc、交互式与非交互式、login与non-login shell的差别

线上的memcached又挂了.仍然没有得到core文件. 排查原因,同事发现启动memcached的脚本存在可疑问题. 问题一:没有设置memcached工作文件夹,有可能core dump时没有工作文件夹写权限 这些脚本由crontab启动.脚本中没有设置工作文件夹.而这是非root用户的crontab.启动memcached时,工作文件夹不是memcached可执行文件所在文件夹.实验证明,这个是用户的home文件夹,crontab执行的脚本中打印pwd,结果是"home/work&quo