关于linux profile 文件中如下代码

来源:互联网 发布:阿里云邮箱中病毒 编辑:程序博客网 时间:2024/05/22 08:01

转: http://kodango.com/explain-shell-default-options

for i in /etc/profile.d/*.sh ; do    if [ -r "$i" ]; then        if [ "${-#*i}" != "$-" ]; then            . "$i"        else            . "$i" >/dev/null 2>&1        fi    fidone 

echo $- 结果为:himBH
$-记录着当前设置的shell选项,himBH是默认值,
你可以通过 set 命令来设置或者取消一个选项配置。例如:set -x

i - interactive
包含这个选项说明当前的 shell 是一个交互式的 shell,何为交互式?你输入命令,
shell 解释执行后给你返回结果,我们在 Terminal 下使用的 shell 就是交互式的,
所以 $- 会包含 i 字符。如果我们在一个脚本里面 echo $-,
结果是不会包含 i 的。

H - history expand

history expand 这个很多人都基本上不用,包括我也是。我们知道 Shell 会把我们执行的命令记录下来,可以通过 history 命令查看,每一行是序号 + 执行的命令。在 shell 退出时,会将这些信息保存到~/.bash_history 文件中,当然在启动时也会从该文件中加载,不信删除这个文件再打开一个终端试试。history expand 就是展开历史列表中的命令,可以通过!感叹号来完成,例如"!!"返回上最近的一个历史命令,"!n"返回第 n 个历史命令,等等.多扯一句,在命令行下,不要在双引号号里面用!,这会让 Shell "误以为" 你要执行历史展开.

B - brace expansion
和备份相关
$ cp /your/path/to/file{,.bak}

m - monitor mode
可以控制进程的停止、继续,后台或者前台执行等。正常情况下,在交互式模式下,
该选项默认是打开的,所以再执行一个比较耗时的命令时,你可以按下CTRL+Z 让它在后台运行,
然后可以用 fg 命令将后台运行的任务恢复到前台执行。

h - hashall
不知

${-#*i} 翻译过来是说,从左往右看,删除掉 $- 变量的值中第一个 i 字符以及之前的内容。
与此相对的,还有${-%i*}的写法,%与#号的意义刚好相反,从右往左看,删除掉 $- 变量的值中
最后一个 i 字符以及之后的内容。

0 0
原创粉丝点击