linux - 不明白bash配置文件/etc/bashrc代码的含义
PHP中文网
PHP中文网 2017-04-17 16:03:06
[Linux讨论组]
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(5)
伊谢尔伦

为什么不去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 中的注释:

# 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

. "$i" >/dev/null 的含义是 source 文件 $i 但是不显示输出。

高洛峰

作用就是读取profile.d/*.sh文件,至于/dev/null是避免source文件时会输出信息。
默认情况下profile.d/中的文件都是没有输出信息,也就是直接定义了一些变量;但是用户可能会自己在profile.d/下添加自定义的环境变量配置文件,例如我的系统中:

[root@3dzfiejazf ~]# cat /etc/profile.d/mysql.sh 
export PATH=$PATH:/usr/local/mysql/bin
echo ok
[root@3dzfiejazf ~]# source /etc/profile.d/mysql.sh
ok

上面的情况下,&>/dev/null就管用了:

[root@3dzfiejazf ~]# source /etc/profile.d/mysql.sh &> /dev/null
[root@3dzfiejazf ~]# 
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号