# Only display echos from profile.d scripts if we are no login shell
# and interactive - otherwise just process them to set envvars
for i in /etc/profile.d/*.sh; do
if [ -r "$i" ]; then
if [ "$PS1" ]; then
. "$i"
else
. "$i" >/dev/null 2>&1
fi
fi
done
为什么不去Google一番之后再来提问?
Shell 默认选项 himBH 的解释
我刚刚发现我也不会这个问题,所以我就去Google了一番,立马就出来了。如果你上不了Google,建议你去购买翻墙软件或者自己去外网购买搭建代理服务器
至于为什么会出现
>/dev/null,很简单,就是输出重定向。上面分支不会出现输出,下面分支会出现输出,/dev/null是一个类似黑洞的玩意,什么东西丢进去,就相当于删除掉了你把上面链接中的文章看了,为什么知道为什么2个分支有的分支之后有的有输出,有的没有输出了
那个if就是判断当前shell是否是interactive的,是interactive的,输出不重定向,不是interactive,输出重定向到null。
加"-i"会启动一个interactive shell,"$-"变量是当前shell的选项,"${-#i}",是删除"$-"中到"i"的部分,所以如果"${-#i}" != "$-",说明选项中包含"-i",是interactive shell。
汗!或许是我表达不清楚?。。。。。。
我不是在问if在判断什么,那个我知道。我是在问不论if判断的结果是true还是false,这两个分支区别在哪,为什么这样写两个分支。
你可以参考下 centos 中的注释:
. "$i" >/dev/null的含义是 source 文件 $i 但是不显示输出。作用就是读取profile.d/*.sh文件,至于/dev/null是避免source文件时会输出信息。
默认情况下profile.d/中的文件都是没有输出信息,也就是直接定义了一些变量;但是用户可能会自己在profile.d/下添加自定义的环境变量配置文件,例如我的系统中:
上面的情况下,&>/dev/null就管用了: