吃花生米有什么好处| mirror什么意思| 二级烧伤是什么程度| 什么时候锻炼身体最佳时间| 瘦脱相是什么意思| 月子里可以吃什么水果| 贲门ca是什么意思| 海带与什么食物相克| 高血压能喝什么饮料| 青黄不接是什么意思| 中元节出什么生肖| 狐臭是什么原因| 八仙过海是什么意思| 天伦之乐是什么意思| 花椒水泡脚有什么好处| 臣附议是什么意思| 秤砣是什么意思| 18kgp是什么材质| 西瓜什么时候成熟| 老年痴呆吃什么药| 大红袍属于什么档次| 水手服是什么| 睡眠不好是什么原因引起的| 咽炎有什么症状| 1990是什么生肖| 1988是什么生肖| 治疗勃起困难有什么药| 胰头占位是什么病| 早上出虚汗是什么原因| 芡实不能和什么一起吃| 肝硬化是什么引起的| 过度纵欲的后果是什么| 台湾以前叫什么名字| dyf是什么意思| 流鼻涕吃什么药| 小兔子吃什么食物| 双肾囊肿什么意思| 什么是0| 为什么胸会痒| 调理月经吃什么药最好| 吃什么胎儿眼睛黑又亮| 1月3号是什么星座| 前列腺炎需要做什么检查| 什么的小草| 腰痛应该挂什么科| 为的多音字是什么| 头皮发白是什么原因| 什么是oa| 什么叫老人临终骨折| 5月出生是什么星座| 吃二甲双胍为什么会瘦| 静对什么| 禅让制是什么意思| 宫颈口在什么位置| 狗喜欢吃什么食物| 杀鸡取卵是什么生肖| 怀孕前期有什么征兆| 属蛇女和什么属相最配| 精子是什么颜色的| 什么眼霜比较好用| 办理护照需要什么材料| 梦见黄瓜是什么意思| 单方精油和复方精油有什么区别| 贺涵为什么会爱上罗子君| c3是什么| 荷花的花语是什么| 学的偏旁部首是什么| 手上的月牙代表什么意思| 2.18是什么星座| nt检查什么内容| 女用避孕套是什么样的| 梦见刺猬是什么意思| 尿检肌酐高是什么原因| 什么叫意识| paco2是什么意思| 男人阴虚吃什么药最好| 上海有什么好玩的地方适合小孩子| 风属于五行属什么| 1月29日什么星座| 动漫ova是什么意思| 下午一点多是什么时辰| 月亮什么时候是圆的| 推特是什么意思| 太阳穴长痘痘什么原因| 专业职称是什么| 什么是纸片人| ceo是什么意思| 寿终正寝是什么意思| 为什么肚子会隐隐作痛| 梦见婆婆去世预示什么| 什么是pv| 清纯是什么意思| 血糖高做什么运动好| 三个女人一台戏什么意思| 太作了是什么意思| 为什么白带是褐色的| 心脏疼挂什么科| 白带异常用什么药| 汗青是什么意思| sandals是什么意思| 猪苓是什么东西| 皮肤细菌感染用什么药| 安宫牛黄丸为什么那么贵| 人为什么会胖| 妇科tct检查什么| 老年人嘴唇发紫是什么原因| 老是打嗝什么原因| 胡巴是什么| 粉饼和散粉有什么区别| 两毛二是什么军衔| 九月十五是什么星座的| 柏拉图式是什么意思| 什么是数字货币| 秫米是什么米| 三宝是什么意思| 儿童便秘吃什么药| 阴蒂痛是什么原因| 屠苏是什么意思| 属狗的幸运色是什么颜色| 特长写什么| 补骨脂是什么东西| 例假血发黑是什么原因| 13年是什么年| 肺炎衣原体阳性是什么意思| 脸上不出汗是什么原因| 月亮是什么意思| 什么座| 68岁属什么生肖| 什么负什么名| 阅读是什么意思| 月亮是什么生肖| 什么堂大什么| 刘亦菲是什么国籍| 海灵菇是什么东西| 什么的梨子| 釉面是什么意思| gas什么意思| 7.11是什么日子| 祠堂是什么意思| 什么云见日| 肾上腺挂什么科| 土豆什么时候种植| 杨梅酒有什么功效| 孕早期吃什么水果好| 丹毒不能吃什么| 血压高看什么科| 喉咙痛头痛吃什么药| 只欠东风的上一句是什么| 核桃壳有什么用处| 苹果对身体有什么好处| 牙齿出血是什么病| 5月29日是什么星座| clarks是什么牌子| 什么紫什么红| 留个念想是什么意思| 带状疱疹用什么药好| 沉沦是什么意思| 龟兔赛跑的故事告诉我们什么道理| 牙龈发炎用什么药| 碘酊和碘伏有什么区别| 美妞是什么意思| 病毒性感冒吃什么药| 普外科是什么科| 三维彩超主要检查什么| 榆字五行属什么| 肾属于什么科| 什么是豆制品| 红薯不能和什么食物一起吃| 做梦梦到蟒蛇是什么征兆| 祭坛是什么意思| 三伏天喝什么汤| 什么炎炎| 自动化是干什么的| 痛风看什么科| 白细胞正常c反应蛋白高说明什么| 总出虚汗什么原因怎么解决| 头晕吃什么可以缓解| 月经期间同房有什么危害| 抢七是什么意思| 吃什么水果会变白| 左眼皮跳是什么预兆女| 什么叫闭合性跌打损伤| 有尿意但是尿不出来是什么原因| 心计是什么意思| 小孩缺铁有什么症状| 哮喘吃什么食物好| 不结婚的叫什么族| 牙龈经常出血是什么原因| 5w是什么意思| 麻药叫什么名字| 金戊念什么| 1950年是什么年| 什么是抹茶| 吃什么降血压最快最好方法| 则字五行属什么| 新诺明又叫什么| 野兽之王是什么动物| 做扩胸运动有什么好处| 后背痛是什么原因| 贡生相当于现在的什么| 拉肚子拉水吃什么药| acs是什么| 胃嗳气是什么症状| egg是什么意思| 刻板印象是什么意思| 移动电源和充电宝有什么区别| 儿童胃炎吃什么药| 衬衫配什么裤子好看| 阑尾炎应该挂什么科| 非洲人说什么语言| 八月五号是什么星座| 肾结石都有什么症状| 口坐念什么| 汕头有什么好玩的景点| 公务员是干什么工作的| 慢性胰腺炎吃什么药效果最好| 七点到九点是什么时辰| 手麻木是什么引起的| 辣木籽是什么| 治疗阳痿早泄用什么药| 强迫症有什么症状| 五月二十是什么星座| 心绞痛是什么原因引起的| 白发吃什么维生素| 留低是什么意思| 梦见捡到钱是什么征兆| 冢字的意思是什么| 伊玛目是什么意思| 吃开心果有什么好处和坏处| 骨密度挂什么科| 为什么减肥一直减不下来| 过期化妆品属于什么垃圾| 血液循环不好吃什么药| 今年是什么年号| 大便有凹槽是什么原因| 清款是什么意思| 浅蓝色是什么颜色| 土豆不能和什么食物一起吃| 男性性功能障碍吃什么药| pct偏高说明什么| 皮癣是什么原因引起的| 五险一金什么时候开始交| 金秘书为什么那样| 什么人容易得焦虑症| 妇科臭氧治疗的作用是什么| 验血糖挂什么科| 什么最解渴| 移居改姓始为良是什么意思| hl是什么意思| 是什么词性| 右脚麻是什么病的前兆| 南京有什么特色特产| 美的本质是什么| 莫名其妙的心情不好是什么原因| 低血压吃什么补得最快| 灵魂契合是什么意思| 中级会计什么时候报名| 南瓜是什么颜色| 3月16是什么星座| 什么可以补肾壮阳| 不怕流氓什么就怕流氓有文化| 退烧药吃多了有什么副作用| 93年的属什么| 摸胸是什么感觉| 百度跳转到内容

学习宣传贯彻党的十九大精神

本页使用了标题或全文手工转换
维基百科,自由的百科全书
Bash
Bash会话的截图
Bash会话的截图
原作者布莱恩·福克斯
首次发布2025-08-07,​36年前​(2025-08-07
当前版本
  • 5.3(2025-08-07;稳定版本)[1]
编辑维基数据链接
源代码库 编辑维基数据链接
编程语言C语言
操作系统
平台GNU
语言多语言(gettext
类型Unix shell命令语言英语command language
许可协议GPLv3+[6]
网站www.gnu.org/software/bash/
百度   而法国总统马克龙的声援一方面是要占据道德制高点,另一方面则是利用德国总理默克尔组阁困难之际,抢先代表欧盟发出声音,显示自己作为欧盟领导者的存在。

BashUnix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括LinuxMac OS X v10.4起至macOS Mojave都将它作为默认shell,而自macOS Catalina,默认Shell以zsh取代。

Bash是Bourne shell的后继兼容版本与开放源代码版本,它的名称来自Bourne shell(sh)的一个双关语(Bourne again / born again):Bourne-Again SHell。

Bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令。Bash还能从文件中读取命令,这样的文件称为脚本。和其他Unix shell 一样,它支持文件名替换(通配符匹配)、管道here文档、命令替换、变量,以及条件判断和循环遍历的结构控制语句。包括关键字、语法在内的基本特性全部是从sh借鉴过来的。其他特性,例如历史命令,是从cshksh借鉴而来。总的来说,Bash虽然是一个满足POSIX规范的shell,但有很多扩展。

一个名为Shellshock的安全漏洞在2014年9月初被发现,并迅速导致互联网上的一系列攻击。这个漏洞可追溯到1989年发布的1.03版本。

历史

[编辑]

由于理查德·斯托曼对于之前一位开发者的进度不满,布莱恩·福克斯从2025-08-07开始开发Bash。斯托曼和自由软件基金会希望到一个能够运行已有的shell脚本的自由软件。他们把这看作是建成一个基于BSD和GNU的完全自由的操作系统的战略的重要部分。这是他们自己注资的几个项目之一。福克斯作为自由软件基金会的雇员承担这项工作。2025-08-07,福克斯发布Bash的beta版本,版本号为.99。在福克斯离开于1992年中期到1994年中期的某个时候离开自由软件基金会之前,他一直担任Bash的主要维护者。之后,他的工作被传递给另一个早期贡献者,切特·雷米(Chet Ramey)。

从那时起,在Linux用户当中sh在很大度上成为最流行的shell,并成为许多Linux发行版默认的交互式shell(不过Almquist shell可能是默认的脚本shell)。在苹果公司的 OS X 操作系统上也是如此。Bash 也被移植到 Microsoft Windows(通过CygwinMinGW)。通过DJGPP项目,Bash被移植到了DOS。通过许多终端模拟软件,Bash被移植到Novell NetWareAndroid。微软在2016年的Build大会上宣布,Windows 10 添加一个Linux子系统,完全支持Bash和其他Ubuntu下的二进制程序。

2025-08-07,Stephane Chazelas,一位工作于英国,致力于Unix/Linux和网络通信方面的专家,发现Bash的一个安全漏洞。这个漏洞被命名为Shellshock,并被分配编号 CVE-2014-6271、CVE-2014-6277、CVE-2014-7169。这个漏洞非常严重,因为使用Bash的CGI脚本会变得脆弱,使得攻击者可以执行任意的代码。这个漏洞与Bash通过环境变量把函数定义传递给shell子进程的方式有关。

语法与特性

[编辑]

bash的命令语法是Bourne shell命令语法的超集。数量庞大的Bourne shell脚本大多不经修改即可以在bash中执行,只有那些引用了Bourne特殊变量或使用了Bourne的内置命令的脚本才需要修改。bash的命令语法很多来自Korn shell(ksh)和C Shell(csh),例如命令行编辑,命令历史,目录栈,$RANDOM$PPID变量,以及POSIX的命令置换语法:$(...)。作为一个交互式的shell,按下TAB键即可自动补全已部分输入的程序名,文件名,变量名等等。

使用'function'关键字时,Bash的函数声明与Bourne/Korn/POSIX脚本不兼容(Korn shell 有同样的问题)。不过Bash也接受Bourne/Korn/POSIX的函数声明语法。因为许多不同,Bash脚本很少能在Bourne或Korn解释器中运行,除非编写脚本时刻意保持兼容性。然而,随着Linux的普及,这种方式正变得越来越少。不过在POSIX模式下,Bash更加符合POSIX。

bash的语法针对Bourne shell的不足做了很多扩展。其中的一些列举在这里。

花括号扩展

[编辑]

花括号扩展是一个从C shell借鉴而来的特性,它产生一系列指定的字符串(按照原先从左到右的顺序)。这些字符串不需要是已经存在的文件。

$ echo a{p,c,d,b}e
ape ace ade abe
$ echo {a,b,c}{d,e,f}
ad ae af bd be bf cd ce cf

花括号扩展不应该被用在可移植的shell脚本中,因为Bourne shell产生的结果不同。

#! /bin/sh

# 传统的shell并不产生相同结果
echo a{p,c,d,b}e # a{p,c,d,b}e

当花括号扩展和通配符一起使用时,花括号扩展首先被解析,然后正常解析通配符。因此,可以用这种方法获得当前目录的一系列JPEG和PNG文件。

ls *.{jpg,jpeg,png}    # 首先扩展为*.jpg *.jpeg *.png,然后解析通配符
echo *.{png,jp{e,}g}   # echo显示扩展结果;花括号扩展可以嵌套。

除了列举备选项,还可以用“..”在花括号扩展中指定字符或数字范围。较新的Bash版本接受一个整数作为第三个参数,指定增量。

$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
$ echo file{1..4}.txt
file1.txt file2.txt file3.txt file4.txt
$ echo {a..e}
a b c d e
$ echo {1..10..3}
1 4 7 10
$ echo {a..j..3}
a d g j

当花括号扩展和变量扩展一起使用时,变量扩展解析于花括号扩展之后。有时有必要使用内置的eval函数

$ start=1; end=10
$ echo {$start..$end}  # 由于解析顺序,无法得到想要的结果
{1..10}
$ eval echo {$start..$end} # 首先进行变量扩展的解析
1 2 3 4 5 6 7 8 9 10

使用整数

[编辑]

与Bourne shell不同的是bash不用另外生成进程即能进行整数运算。bash使用((...))命令和$[...]变量语法来达到这个目的:

 VAR=55             # 将整数55赋值给变量VAR
 ((VAR = VAR + 1))  # 变量VAR加1。注意这里没有'$'
 ((++VAR))          # 另一种方法给VAR加1。使用C语言风格的前缀自增
 ((VAR++))          # 另一种方法给VAR加1。使用C语言风格的后缀自增
 echo $((VAR * 22)) # VAR乘以22并将结果送入命令
 echo $[VAR * 22]   # 同上,但为过时用法

((...))命令可以用于条件语句,因为它的退出状态是0或者非0(大多数情况下是1),可以用于是与非的条件判断:

 if((VAR == Y * 3 + X * 2))
 then
         echo Yes
 fi

 ((Z > 23)) && echo Yes

((...))命令支持下列比较操作符:'==', '!=', '>', '<', '>=',和'<='。

bash不能在自身进程内进行浮点数运算。当前有这个能力的unix shell只有KornShellZ shell

输入输出重定向

[编辑]

bash拥有传统Bourne shell缺乏的I/O重定向语法。bash可以同时重定向标准输出和标准错误,这需要使用下面的语法:

 command &> file

这比等价的Bourne shell语法"command > file 2>&1"来的简单。2.05b版本以后,bash可以用下列语法重定向标准输入至字符串(称为here string):

 command <<< "string to be read as standard input"

如果字符串包括空格就需要用引号包裹字符串。

例子: 重定向标准输出至文件,写数据,关闭文件,重置标准输出。

 # 生成标准输出(文件描述符1)的拷贝文件描述符6
 exec 6>&1
 # 打开文件"test.data"以供写入
 exec 1>test.data
 # 产生一些内容
 echo "data:data:data"
 # 关闭文件"test.data"
 exec 1>&-
 # 使标准输出指向FD 6(重置标准输出)
 exec 1>&6
 # 关闭FD6
 exec 6>&-

打开及关闭文件

 # 打开文件test.data以供读取
 exec 6<test.data
 # 读文件直到文件尾
 while read -u 6 dta
 do
   echo "$dta"
 done
 # 关闭文件test.data
 exec 6<&-

抓取外部命令的输出

  # 运行'find'并且将结果存于VAR
  # 搜索以"h"结尾的文件名
  VAR=$(find . -name "*h")

进程内的正则表达式

[编辑]

bash 3.0支持进程内的正则表达式,使用下面的语法:

 [[ string =~ regex ]]

正则表达式语法同regex(7) man page所描述的一致。正则表达式匹配字符串时上述命令的退出状态为0,不匹配为1。正则表达式中用圆括号括起的子表达式可以访问shell变量BASH_REMATCH,如下:

 if [[ abcfoobarbletch =~ 'foo(bar)bl(.*)' ]]
 then
         echo The regex matches!
         echo $BASH_REMATCH      -- outputs: foobarbletch
         echo ${BASH_REMATCH[1]} -- outputs: bar
         echo ${BASH_REMATCH[2]} -- outputs: etch
 fi

使用这个语法的性能要比生成一个新的进程来运行grep命令优越,因为正则表达式匹配在bash进程内完成。如果正则表达式或者字符串包括空格或者shell 关键字,(诸如'*'或者'?'),就需要用引号包裹。Bash 4 开始的版本已经不需要这么做了。

转义字符

[编辑]

$'string' 形式的字符串会被特殊处理。字符串会被展开成string,并像C语言那样将反斜杠及紧跟的字符进行替换。反斜杠转义序列的转换方式如下:

转义字符
转义字符 扩展成...
\a 响铃符
\b 退格符
\e ANSI转义符,等价于\033
\f 馈页符
\n 换行符
\r 回车符
\t 水平制表符
\v 垂直制表符
\\ 反斜杠
\' 单引号
\nnn 十进制值为nnn的8-bit字符(1-3位)
\xHH 十六进制值为HH的8-bit字符(1或2位)
\cx control-X字符

扩展后的结果将被单引号包裹,就好像美元符号一直就不存在一样。

双引号包裹的字符串前若有一个美元符号($"...")将会使得字符串被翻译成符合当前locale的语言。如果当前locale是C或者POSIX,美元符号会被忽略。如果字符串被翻译并替换,替换后的字符串仍被双引号包裹。

关联数组

[编辑]

Bash 4.0 开始支持关联数组,通过类似AWK的方式,对于多维数组提供了伪支持。

$ declare -A a         # 声明一个名为a的伪二位数组
$ i=1; j=2
$ a[$i,$j]=5           # 将键 "$i,$j" 与值 5 对应
$ echo ${a[$i,$j]}

移植性

[编辑]

调用Bash时指定 --posix 或者在脚本中声明 set -o posix ,可以使得Bash几乎遵循 POSIX 1003.2 标准。若要保证一个Bash脚本的移植性,至少需要考虑到 Bourne shell,即Bash取代的shell。Bash有一些传统的 Bourne shell 所没有的特性,包括以下这些:

  • 某些扩展的调用选项
  • 命令替换(即$())(尽管这是 POSIX 1003.2 标准的一部分)
  • 花括号扩展
  • 某些数组操作、关联数组
  • 扩展的双层方括号判断语句
  • 某些字符串生成操作
  • 进程替换
  • 正则表达式匹配符
  • Bash特有的内置工具
  • 协进程

键盘快捷键

[编辑]

Bash默认使用Emacs的快捷键,可以通过 set -o vi 让它使用Vi的快捷键

进程管理

[编辑]

Bash有两种执行命令的模式:批处理模式、并发模式。

批处理模式

[编辑]

要以 批处理模式 执行命令(即按照顺序),必须用;分隔,例子如下:

command1 ; command2

在这个例子中,当command1执行完毕,即执行command2

并发模式

[编辑]

使command1后台运行,则单独在结尾处使用&,例子如下:

command1 &

要并发执行两个命令,它们必须用&分隔,例子如下:

command1 & command2

在这种情况下,command1 在后台执行(通过&),从而立即将控制返回到shell,以执行command2

通过 Control+Z 可以将当前进程挂起(放置后台并暂停运行),可通过 fg 命令恢复至前台,也通过bg将挂起的进程后台运行。

查看进程状态

[编辑]

所有进程的情况,我们可以通过jobs命令查看,包含正在后台运行和停止了的。

$ jobs
[1]-  Running                  command1 &
[2]+  Stopped                  command2

上例的输出结果中,中括号包围的数字(如: "[1]" 和 "[2]" )为job的ID号。加号(+)用于指定fgbg命令的默认对象job。减号( - )用于指定,若当前的默认对象job退出后,下一个默认对象job是谁。"Running" 和 "Stopped" 表示进程状态。 最后一个字段为命令。[7]


总结:

  • 一般命令在前台执行(fg),执行完毕后,控制返回给用户。
  • 在命令后面加上&,它会在后台执行(bg),并将特殊的环境变量$!设置为该任务的进程ID。这时shell可以并发执行其他命令。
  • 后台程序试图写入数据到终端设备时(与写入标准输出不同)可能被阻塞。
  • shell可以等待一个后台任务执行完成,只需使用wait命令,加上进程ID或者任务序号;也可以等待所有的后台任务,只需使用不加参数的wait

启动脚本

[编辑]

bash启动的时候会运行各种不同的脚本。

当bash作为一个登录的交互shell被调用,或者作为非交互shell但带有--login参数被调用时,它首先读入并执行文件/etc/profile。然后它会依次寻找~/.bash_profile~/.bash_login,和~/.profile,读入并执行第一个存在且可读的文件。--noprofile参数可以阻止bash启动时的这种行为。

当一个登录shell退出时,bash读取并执行~/.bash_logout文件,如果此文件存在。

当一个交互的非登录shell启动后,bash读取并执行~/.bashrc文件。这个行为可以用--norc参数阻止。--rcfile file参数强制bash读取并执行指定的file而不是默认的~/.bashrc

如果用sh来调用bash,bash在启动后进入posix模式,它会尽可能模仿sh历史版本的启动行为,以便遵守POSIX标准。用sh名字调用的非交互shell不会去读取其他启动脚本,--rcfile参数无效。

当bash以POSIX模式启动时(例如带有--posix参数)它使用POSIX标准来读取启动文件。在此模式下,交互shells扩展变量ENV,从以此为文件名的文件中读取命令并执行。

bash会探测自己是不是被远程shell守护程序运行(通常是rshd)。如果是,它会读取并执行~/.bashrc中的命令。但是rshd一般不会用rc相关参数调用shell,也不会允许指定这些参数。

Bash与Bourne shell和csh启动脚本的比较

[编辑]

Bash的特性是从Bourne shell和csh发展而来,因此一定程度上允许同Bourne shell的启动文件共享,并提供一些csh用户熟悉的启动特性。

设置可继承的环境变量

[编辑]

Bourne shell登陆时使用 ~/.profile 来设置环境变量,这些环境变量可以被子进程继承。Bash可以以兼容的方式使用~/.profile ,只需在Bash自有的脚本中显式执行下面这行代码。通过在~/.profile 中避免使用Bash特有的语法,就可以和Bourne shell保持兼容性。

. ~/.profile

别名和函数

[编辑]

更通用的函数以及借鉴自csh的“别名(alias)”很大程度上取代了Bourne shell的别名(alias)和函数。然而这两个特性一般不能从登录式shell中继承,在该登录式shell的子shell中,它们必须被重新定义。尽管有个环境变量ENV可以被用于这个问题,不过 csh 和 Bash 都可以用子shell的启动脚本直接处理。在Bash当中,~/.bashrc 是交互式子shell启动时执行的脚本。如果想要在登录式shell中使用 ~/.bashrc 定义的函数,可以在 ~/.bash_login 的环境变量后面加上这样一行:

. ~/.bashrc

登录与退出时执行的命令

[编辑]

最初登录时,csh 执行 ~/.login ,可以执行一些只在登录时执行的操作,例如显示系统负载、硬盘状态、是否收到新邮件、在日志中记录登录时间,等等。Bourne shell 可以在 ~/.profile 文件中模拟这种行为,但并没有预先定义文件名。可以在 ~/.bash_profile 文件的环境变量设置和函数定义的后面添加这样一行:

. ~/.bash_login

与之类似,csh还有一个文件 ~/.logout ,这个文件只在登录式shell退出时执行。Bash与之对应的文件是 ~/.bash_logout ,并且不需要专门的设置。在 Bourne shell 中,trap 这个内置工具可以实现类似的效果。

兼容旧环境的Bash启动脚本示例

[编辑]

下面这个 ~/.bash_profile 的框架与 Bourne shell 兼容,并且为 ~/.bashrc~/.bash_login 提供类似于 csh 的语义。[ -r 文件名] 测试指定文件是否存在,如果不存在,跳过 && 后面的部分

[ -r ~/.profile ] && . ~/.profile             # 只使用Bourne shell的语法设置环境变量
if [ -n "$PS1" ] ; then                       # 判断是否是交互式shell
   [ -r ~/.bashrc     ] && . ~/.bashrc        # 加载~/.bashrc(tty、prompt、函数设置等)
   [ -r ~/.bash_login ] && . ~/.bash_login    # 执行登录式shell登录时的任务
fi                                            # if块的结束标志

Bash 启动脚本与操作系统相关的问题

[编辑]

一些 Unix 和 Linux 版本常在 /etc 放置 Bash 的系统级启动脚本。Bash在其标准的初始化过程中执行它们,不过其他启动脚本可以按照不同于Bash启动序列文档所述的顺序来读取这些文件。root 用户的文件默认内容,以及新用户被创建时系统提供的默认文件可能有问题。启动 X窗口系统 的启动脚本可能使用用户的 Bash 启动脚本尝试在 窗口管理器 启动之前设置用户的环境变量。这些问题常常可以通过使用 ~/.xsession 或者 ~/.xprofile 来读取 ~/.profile 而解决。

参见

[编辑]

脚注

[编辑]
  1. ^ Bash-5.3-release available. 2025-08-07 [2025-08-07] (英语). 
  2. ^ Bash FAQ, version 4.14. [2025-08-07]. (原始内容存档于2025-08-07). 
  3. ^ Why does Apple ship bash 3.2?. apple.stackexchange.com. [2025-08-07]. (原始内容存档于2025-08-07). 
  4. ^ Missing source code - GPL compliance? · Issue #107 · Microsoft/WSL. GitHub. [2025-08-07]. (原始内容存档于2025-08-07). 
  5. ^ GNU Bash. Softpedia. SoftNews. [2025-08-07]. (原始内容存档于2025-08-07). 
  6. ^ GNU Project. README file. [2025-08-07]. (原始内容存档于2025-08-07). Bash is free software, distributed under the terms of the [GNU] General Public License as published by the Free Software Foundation, version 3 of the License (or any later version). 
  7. ^ jobs.1p - Linux manual page. man7.org. [2025-08-07]. (原始内容存档于2025-08-07). 

外部链接

[编辑]
生物钟什么意思 上面白下面本念什么 鹰的天敌是什么动物 11月25日是什么星座 脾阳虚吃什么中成药
理发师代表什么生肖 肠易激综合征中医叫什么 萝莉控是什么意思 早起的鸟儿有虫吃是什么意思 孕妇梦到被蛇咬是什么意思
太阳穴有痣代表什么 咽炎吃什么药 玉米是什么时候传入中国的 分散片是什么意思 大姨妈不能吃什么水果
梅杰综合症是什么病 磷偏低是什么原因 剖腹产可以吃什么水果 脑膜瘤钙化意味着什么 去三亚需要什么证件
妙三多预防什么hcv8jop3ns9r.cn 专一是什么意思hcv8jop0ns7r.cn 什么病不能吃西兰花hcv8jop2ns8r.cn 彩超能检查出什么hcv9jop1ns6r.cn cdts什么意思0735v.com
高血脂是什么原因造成的hcv9jop7ns0r.cn 含羞草能治什么病hcv8jop9ns3r.cn 铁蛋白低吃什么可以补hcv9jop1ns1r.cn 刻舟求剑是什么生肖hcv9jop5ns7r.cn 手工diy是什么意思hcv8jop7ns7r.cn
22年什么婚travellingsim.com 什么是满汉全席hcv9jop4ns4r.cn 头爱出汗是什么原因hcv9jop2ns1r.cn dia什么意思hcv8jop7ns0r.cn 晚上看见刺猬预示什么hcv9jop0ns6r.cn
右肾小结石是什么意思hcv8jop8ns2r.cn 什么颜色招财并聚财hcv9jop0ns3r.cn 黑色五行属什么hcv9jop7ns5r.cn 连襟是什么关系hcv9jop0ns5r.cn 申酉是什么时间dayuxmw.com
百度