什么是shell?bash和shell有什么关系?
什么是Shell?
shell是你(⽤户)和Linux(或者更准确的说,是你和Linux内核)之间的接⼝程序。你在提⽰符下输⼊的每个命令都由shell先解释然后传给Linux内核。
shell 是⼀个命令语⾔解释器(command-language interpreter)。拥有⾃⼰内建的 shell 命令集。此外,shell也能被系统中其他有效的Linux 实⽤程序和应⽤程序(utilities and application programs)所调⽤。
不论何时你键⼊⼀个命令,它都被Linux shell所解释。⼀些命令,⽐如打印当前⼯作⽬录命令(pwd),是包含在Linux bash内部的(就象DOS的内部命令)。其他命令,⽐如拷贝命令(cp)和移动命令(rm),是存在于⽂件系统中某个⽬录下的单独的程序。⽽对⽤户来说,你不知道(或者可能不关⼼)⼀个命令是建⽴在shell内部还是⼀个单独的程序。
shell ⾸先检查命令是否是内部命令,不是的话再检查是否是⼀个应⽤程序,这⾥的应⽤程序可以是Linux本⾝的实⽤程序,⽐如ls 和 rm,也可以是购买的商业程序,⽐如 xv,或者是公⽤软件(public domain software),就象 ghostview。然后shell试着在搜索路径($PATH)⾥寻这些应⽤程序。搜索路径是⼀个能到可执⾏程序的⽬录列表。如果你键⼊的命令不是⼀个内部命令并且在路径⾥没有到这个可执⾏⽂件,
将会显⽰⼀条错误信息。⽽如果命令被成功的到的话,shell的内部命令或应⽤程序将被分解为系统调⽤并传给Linux内核。
shell的另⼀个重要特性是它⾃⾝就是⼀个解释型的程序设计语⾔,shell 程序设计语⾔⽀持在⾼级语⾔⾥所能见到的绝⼤多数程序控制结构,⽐如循环,函数,变量和数组。shell 编程语⾔很易学,并且⼀旦掌握后它将成为你的得⼒⼯具。任何在提⽰符下能键⼊的命令也能放到⼀个可执⾏的shell程序⾥,这意味着⽤shell语⾔能简单地重复执⾏某⼀任务。
shell 如何启动?
shell在你成功地登录进⼊系统后启动,并始终作为你与系统内核的交互⼿段直⾄你退出系统。你系统上的每位⽤户都有⼀个缺省的shell。每个⽤户的缺省shell在系统⾥的passwd⽂件⾥被指定,该⽂件的路径是/etc/passwd。passwd⽂件⾥还包含有其他东西:每个⼈的⽤户ID 号,⼀个⼝令加密后的拷贝和⽤户登录后⽴即执⾏的程序,(注:为了加强安全性,现在的系统⼀般都把加密的⼝令放在另⼀个⽂件--shadow中,⽽passwd中存放⼝令的部分以⼀个x字符代替)虽然没有严格规定这个程序必须是某个Linux shell,但⼤多数情况下都如此。
最常⽤的shell:
在Linux 和 UNIX系统⾥可以使⽤多种不同的shell可以使⽤。最常⽤的⼏种是 Bourne shell (sh), C shell (csh), 和 Korn shell (ksh)。三种shell 都有它们的优点和缺点。Bourne shell 的作者是 Steven Bourne。它是 UNIX 最初使⽤的shell 并且在每种 UNIX 上都可以使⽤。Bourne shell 在 shell 编程⽅⾯相当优秀,但在处理与⽤户的交互⽅⾯作得不如其他⼏种 shell。
C shell 由 Bill Joy 所写,它更多的考虑了⽤户界⾯的友好性。它⽀持象命令补齐(command-line completion)等⼀些 Bourne shell 所不⽀持的特性。普遍认为C shell 的编程接⼝做的不如 Bourne shell, 但 C shell 被很多 C 程序员使⽤因为 C shell的语法和 C语⾔的很相似,这也是C shell名称的由来。
Korn shell (ksh) 由 Dave Korn 所写。它集合了C shell 和 Bourne shell 的优点并且和 Bourne shell 完全兼容。
除了这些 shell 以外,许多其他的 shell 程序吸收了这些原来的 shell 程序的优点⽽成为新的 shell 。在 Linux 上常见的有 tcsh (csh 的扩展),Bourne Again shell(bash, sh 的扩展), 和Public Domain Korn shell (pdksh, ksh 的扩展)。bash 是⼤多数Linux 系统的缺省 shell。
The Bourne Again Shell
Bourne Again shell (bash), 正如它的名字所暗⽰的,是 Bourne shell 的扩展。bash 与 Bourne shell 完
全向后兼容,并且在 Bourne shell 的基础上增加和增强了很多特性。bash 也包含了很多 C 和 Korn shell ⾥的优点。bash 有很灵活和强⼤的编程接⼝,同时⼜有很友好的⽤户界⾯。
为什么要⽤ bash 来代替 sh 呢?Bourne shell 最⼤的缺点在于它处理⽤户的输⼊⽅⾯。在 Bourne shell ⾥键⼊命令会很⿇烦,尤其当你键⼊很多相似的命令时。⽽ bash 准备了⼏种特性使命令的输⼊变得更容易。
命令补齐(Command-Line Completion)
通常你在 bash (或任何其他的 shell)下输⼊命令时你不必把命令输全 shell 就能判断出你所要输⼊的命令。例如,假定当前的⼯作⽬录包含以下的⽂件和⼦⽬录:
News/ bin/ games/ mail/ samplefile test/
如果你要进⼊ test ⼦⽬录,你将会输⼊以下的命令:
cd test
这个命令能够满⾜你的需要,但 bash还提供了稍微不同的⽅法来完成同样的事。因为 test 是当前⽬录⾥唯⼀以字母 t开头的⼦⽬录,bash 在你只输⼊字母 t后就能判断出你要做什么了:
cd t
在你键⼊那个字母后,唯⼀的可能就是 test 。想让 bash 帮你结束命令的话,按下 Tab 键:
cd t<tab>
当你这样做以后,bash 将帮你补齐命令并显⽰在屏幕上。但在你按下回车键以前命令并没有被执⾏,bash 会让你检验补齐的命令是否是你真正需要的。在输⼊象这样短的命令时你也许看不出它的价值所在,甚⾄在命令很短时还会简慢输⼊的速度,但是当你要输⼊的命令有点长时,你会发现这个特性是多么的美好。
但是当⽬录⾥有不⽌⼀个以字母 t 开头的⽂件时会发⽣什么情况呢?在你使⽤命令补齐时会有问题,让我们看看下⾯的情况,当前⽬录⾥有下列内容:
News/ bin/ mail/ samplefile test/ tools/ working/
现在这个⽬录⾥有两个以字母 t 开头的⽂件。假设你仍然想进⼊ test ⼦⽬录,如何使⽤命令补齐呢?如果你象先前那样键⼊:
cd t<tab>
bash 将不知道你到底想进⼊哪个⼦⽬录,因为给出的信息并不唯⼀。如果你这样做了的话,bash 将发出⼀声蜂鸣提醒你没有⾜够的信息
并再按⼀下 Tab 键,这时 bash 就有⾜够的信息来完成你的命令了:
cd test
当你输⼊命令时不论何时按下 Tab 键,bash 都将尽其所能地试图补齐命令,不⾏的话会发出蜂鸣来提醒你需要更多的信息。你需要键⼊更多的字符,并再次按下 Tab 键,重复这个过程直⾄你期望的命令出现。
通配符
另⼀个使命令输⼊变得更简单的⽅法是在命令中使⽤通配符。bash ⽀持三种通配符:
* 匹配任何字符和任何数⽬的字符
匹配任何单字符
[...] 匹配任何包含在括号⾥的单字符
* 通配符的使⽤有些象命令补齐。例如,假设当前⽬录包含以下⽂件:
News/ bin/ games/ mail/ samplefile test/
如果你想进⼊ test ⽬录,你将键⼊ cd test, 或者你想⽤命令补齐:
cd t<tab>
现在有第三种⽅法来做同样的事。因为仅有⼀个⽂件以字母 t 开头,你也能⽤ * 通配符来进⼊该⽬录。键⼊下列命令:
cd t*
* 匹配任何字符和任何数⽬的字符,所以 shell 将把 t* 替换为 test(当前⽬录⾥唯⼀和通配⽅案匹配的⽂件)。当前⽬录⾥只有⼀个⽂件以字母 t 开头的话这将是可靠的。但是如果当前⽬录⾥有不⽌⼀个⽂件以字母 t 开头,shell 将试着进⼊第⼀个符合匹配⽅案的⽬录,这个⽬录是以字母表排序的第⼀个⽬录,这个⽬录也许是也许不是你所期望的。
通配符 * 的⼀个更实际的⽤途是通配你要执⾏的命令中的多个名字相似的⽂件。例如,假设当前⽬录⾥包含以下⽂件:
ch1.doc ch2.doc ch3.doc chimp config mail/ test/ tools/
如果你需要打印所有扩展名是 .doc 的⽂件,你能使⽤象这样简化的命令:
lpr *.doc
在这个例⼦中,bash 将把 *.doc 替换为当前⽬录下所有⽂件名符合通配⽅案的⽂件。在 bash 进⾏了替换后,该命令将被处理为:
lpr ch1.doc ch2.doc ch3.doc
lpr 命令将以ch1.doc, ch2.doc, 和 ch3.doc为参数被调⽤。
--------------------------------------------------------------------------------
注意:除了以上给出的例⼦外,还有⼏种⽅法:
lpr *doc
lpr *oc
lpr *c
--------------------------------------------------------------------------------
通配符 ? 除了只能匹配单个字符外,其他功能都与通配符 * 相同,如果⽤通配符 ? 来打印前⾯提到的那个⽬录⾥所有扩展名是 .doc 的⽂件的话,键⼊下⾯的命令:
lpr ch?.doc
通配符[...]能匹配括号中给出的字符或字符范围。同样以前⾯的⽬录为例,打印那个⽬录⾥所有扩展名是 .doc 的⽂件,你可以键⼊下列命令之⼀:
lpr ch[123].doc
或者:
lpr ch[1-3].doc
命令历史记录
bash 也⽀持命令历史记录。这意味着 bash 保留了⼀定数⽬的你先前已经在shell ⾥输⼊过的命令。这个数⽬取决于⼀个叫做HISTSIZE的变量。有关 HISTSIZE 的更多信息,请看本⽂后⾯的“bash 变量”⼀节。
bash 把你先前输⼊的命令⽂本保存在⼀个历史列表中。当你⽤你的帐号登录后历史列表将根据⼀个历史⽂件被初始化。历史⽂件的⽂件名被⼀个叫 HISTFILE 的 bash变量指定。历史⽂件的缺省名字是 .bash_history。这个⽂件通常在你的⽤户⽬录($HOME)中。(注意该⽂件的⽂件名以⼀个句号开头,这意味着它是隐含的,仅当你带 -a 或 -A参数的 ls 命令列⽬录时才可见)
仅将先前的命令存在历史⽂件⾥是没有⽤的,所以 bash 提供了⼏种⽅法来调⽤它们。使⽤历史记录列表最简单的⽅法是⽤上⽅向键。按下上⽅向键后最后键⼊的命令将出现在命令⾏上。再按⼀下则倒数第⼆条命令会出现,以此类推。如果上翻多了的话也可以⽤向下的⽅向键来下翻。(和 DOS 实⽤程序doskey⼀样)如果需要的话,显⽰在命令⾏上的历史命令可以被编辑。
另⼀个使⽤命令历史⽂件的⽅法是⽤ bash 的内部命令 history 和 fc(fix 命令)命令来显⽰和编辑历史命令。history 命令能以两种不同的⽅法来调⽤。第⼀种是:
history [n]
当 history 命令没有参数时,整个历史命令列表的内容将被显⽰出来。下⾯是⼀个命令历史列表的例⼦:
1 mkdir /usr/games/pool
2 cp XpoolTable-1.2.linux.tar.z /usr/games/pool
3 cd /usr/games/pool/
4 ls
5 gunzip XpoolTable-1.2.linux.tar.z
6 tar -xf XpoolTable-1.2.linux.tar
7 ls
8 cd Xpool
9 ls
10 xinit
12 which zip
13 zip
14 more readme
15 vi readme
16 exit
使⽤ n 参数的作⽤是仅有最后 n 个历史命令会被列出。例如,history 5 显⽰最后 5 个命令。
调⽤ history 命令的第⼆种⽅法⽤于修改命令历史列表⽂件的内容。命令的语法如下:
history [-r|w|a|n] [filename]
这种形式中,-r 选项告诉 history 命令读命令历史列表⽂件的内容并且把它们当作当前的命令历史列表。-w 选项将把当前的命令历史记录写⼊⽂件中并覆盖⽂件原来的内容。-a 选项把当前的命令历史记录追加到⽂件中。-n 选项将读取⽂件中的内容并加⼊到当前历史命令列表中。如果 filename 选项没有被指定,history 命令将⽤变量HISTFILE 的值来代替。
fc 命令能⽤两种⽅法来编辑历史命令。第⼀种使⽤下列语法:
fc [-e editor_name] [-n] [-l] [-r] [first] [last]
这⾥所有参数都是可选的。-e editor_name 选项⽤来指定⽤于编辑命令的⽂本编辑器。 first 和 last 选项⽤于选择列出历史命令的范围,既可以是数字也可以是字符串。-n 选项禁⽌列出命令的编号。-r 选项反向列出匹配的命令。-l 选项把匹配的命令⾏列在屏幕上(⽽不是在编辑器中)。如果-e editor_name参数没有被指定,则以变量FCEDIT的值来代替,如果该变量不存在的话,则⽤变量EDITOR的值来代替,都不存在的话将使⽤vi编辑器。
别名
bash 的另⼀个使你的⼯作变得轻松的⽅法是命令别名。命令别名通常是其他命令的缩写,⽤来减少键盘输⼊。例如,你经常要键⼊如下的命令,你也许会倾向于为它建⽴⼀个别名来减少⼯作量:
cd /usr/X11/lib/X11/fvwm/sample-configs
假如为这个长命令建⽴⼀个名为goconfig的别名,在bash提⽰符下键⼊如下命令:
alias goconfig='cd /usr/X11/lib/X11/fvwm/sample-configs'
现在,除⾮你退出bash,键⼊goconfig将和原来的长命令有同样的作⽤。如果想取消别名,可以使⽤下⾯的命令:
unalias goconfig
这是⼀些很多⽤户认为有⽤的别名,你可以把它们写⼊你的.profile⽂件中提⾼⼯作效:
alias ll='ls -l'
alias log='logout'
alias ls='ls -F'
如果你是⼀名DOS⽤户并且习惯了DOS命令,你能下⾯的别名定义使你的 Linux 表现得象DOS ⼀样:
alias dir='ls'
alias copy='cp'
alias rename='mv'
alias md='mkdir'
alias rd='rmdir'
注意:在定义别名时,等号的两头不能有空格,否则 shell 不能决定你需要做什么。仅在你的命令中包
含有空格或特殊字符时才需要引号.如果你键⼊不带任何参数的alias命令,将显⽰所有已定义的别名,例如:
alias dir='ls'
alias ll='ls -l'
alias ls='ls -F'
alias md='mkdir'
alias net='term < /dev/modem > /dev/modem 2> /dev/null&'
alias rd='rmdir'
输⼊重定向
输⼊重定向⽤于改变⼀个命令的输⼊源。⼀些命令需要在命令⾏⾥输⼊⾜够的信息才能⼯作。⽐如 rm,你必须在命令⾏⾥告诉 rm 它你要删除的⽂件。另⼀些命令则需要更详细的输⼊,这些命令的输⼊可能是⼀个⽂件。⽐如命令 wc 统计输⼊给它的⽂件⾥的⽂件⾥的字符数,单词数和⾏数。如果你仅在命令
⾏上键⼊ wc <enter> ,wc 将等待你告诉它要统计什么,这时 bash 就好象死了⼀样,你键⼊的每样东西都出现在屏幕上,但什么事也不会发⽣。这是因为 wc 命令正在为⾃⼰收集输⼊。如果你按下Ctrl-D,wc 命令的结果将被写在屏幕上。如果你输⼊⼀个⽂件名做参数,象下⾯的例⼦⼀样,wc 将返回⽂件所包含的字符数,单词数,和⾏数:
wc test
11 2 1
另⼀种把test⽂件内容传给 wc 命令的⽅法是重定向 wc 的输⼊。< 符号在bash⾥⽤于把当前命令的输⼊重定向为指定的⽂件。所以可以⽤下⾯的命令来把 wc 命令的输⼊重定向为 test ⽂件:
wc < test
11 2 1
输⼊重定向并不经常使⽤因为⼤多数命令都以参数的形式在命令⾏上指定输⼊⽂件的⽂件名。尽管如此,当你使⽤⼀个不接受⽂件名为输⼊参数的命令,⽽需要的输⼊⼜是在⼀个已存在的⽂件⾥时,你就能⽤输⼊重定向解决问题。
输出重定向
输出重定向⽐输⼊重定向更常⽤。输出重定向使你能把⼀个命令的输出重定向到⼀个⽂件⾥,⽽不是显⽰在屏幕上。
很多情况下都可以使⽤这种功能。例如,如果某个命令的输出很多,在屏幕上不能完全显⽰,你能把它重定向到⼀个⽂件中,稍后再⽤⽂
令的输⼊时。(还有⼀种更简单的⽅法可以把⼀个命令的输出当作另⼀个命令的输⼊,就是使⽤管道,管道的使⽤将在本⽂的“管道”⼀节介绍)
输出重定向的使⽤与输⼊重定向很相似,但是输出重定向的符号是 > 。
注:记忆输⼊/输出重定向符号的最好⽅法是把<;看作是⼀个漏⽃,漏⽃的⼩⼝指向需要输⼊的命令(因为需要接受输⼊的命令会在 <;的左⼿边),⽽把> 当作⼀个⼤⼝指向有输出的命令的漏⽃。
重定向举例,当你要把 ls 命令的输出保存为⼀个名为 directory.out 的⽂件时,你可以使⽤下⾯的命令:
ls > directory.out
管道
管道可以把⼀系列命令连接起来。这意味着第⼀个命令的输出会通过管道传给第⼆个命令⽽作为第⼆个命令的输⼊,第⼆个命令的输出⼜会作为第三个命令的输⼊,以此类推。⽽管道⾏中最后⼀个命令的输出才会显⽰在屏幕上(如果命令⾏⾥使⽤了输出重定向的话,将会放进⼀个⽂件⾥)。
你能通过使⽤管道符 | 来建⽴⼀个管道⾏,下⾯的⽰例就是⼀个管道⾏:
| grep "High" | wc -l
这个管道将把 cat 命令(列出⼀个⽂件的内容)的输出送给grep命令。grep 命令在输⼊⾥查单词 High,grep命令的输出则是所有包含单词 High的⾏,这个输出⼜被送给 wc命令。带 -l选项的 wc命令将统计输⼊⾥的⾏数。假设 的内容如下:
Things to do today:
Low: Go grocery shopping
High: Return movie
High: Clear level 3 in Alien vs. Predator
Medium: Pick up clothes from dry cleaner
管道⾏将返回结果 2,指出你今天有两件很重要的事要做:
| grep "High" | wc -l
2
提⽰符
bash 有两级⽤户提⽰符。第⼀级是你经常看到的 bash 在等待命令输⼊时的提⽰符。缺省的⼀级提⽰符是字符$(如果是超级⽤户,则是#号)。你可以通过改变bash 的PS1变量的值来改变你的缺省提⽰符,例如:
PS1="Please enter a command"
把bash shell 的提⽰符该为指定的字符串。
当bash 期待输⼊更多的信息以完成命令时显⽰第⼆级提⽰符。缺省的第⼆级提⽰符是 >。果你要改变第⼆级提⽰符,可以通过设置PS2变量的值来实现:
PS2="I need more information"
另外你还可以⽤特殊的字符来定义你的提⽰符,下⾯的列表列出了最常⽤的特殊字符。
提⽰符特殊字符代码
字符含义
/! 显⽰该命令的历史记录编号。
/# 显⽰当前命令的命令编号。
/$ 显⽰$符作为提⽰符,如果⽤户是root的话,则显⽰#号。
// 显⽰反斜杠。
/d 显⽰当前⽇期。
/h 显⽰主机名。
/n 打印新⾏。
/nnn 显⽰nnn的⼋进制值。
/
s 显⽰当前运⾏的shell的名字。
/t 显⽰当前时间。
/u 显⽰当前⽤户的⽤户名。
/W 显⽰当前⼯作⽬录的名字。
/w 显⽰当前⼯作⽬录的路径。
这些特殊字符能组合成很多种有⽤的提⽰符⽅案(也可以组合为很奇异的⽅案),例如把 PS1 设为:
PS1="/t"
这导致提⽰符显⽰当前的时间,就象下⾯的显⽰⼀样(提⽰符后⾯将不会有空格):
02:16:15
⽽下⾯的设置:
将导致提⽰符变成下⾯的样⼦:
t
这显⽰了设置中引号的重要性,下⾯的提⽰符串:
PS1="/t// "
会使提⽰符看起来象这个样⼦:
02:16:30/
这种情况下,提⽰符后⾯会有⼀个空格,因为引号⾥有⼀个空格。
作业控制(Job Control)
作业控制能够控制当前正在运⾏的进程的⾏为。特别地,你能把⼀个正在运⾏的进程挂起,稍后再恢复它的运⾏。bash 保持对所有已启动的进程的跟踪,你能在⼀个正在运⾏的进程的⽣命期内的任何时候把它挂起或是使它恢复运⾏。
按下 Ctrl-Z 使⼀个运⾏的进程挂起。bg 命令使⼀个被挂起的进程在后台恢复运⾏,反之 fg 命令使进程在前台恢复运⾏。这⼏个命令在当⽤户想在后台运⾏⽽意外的把它放到了前台时,经常被⽤到。当⼀个
命令在前台被运⾏时,它会禁⽌⽤户与 shell 的交互,直到该命令结束。这通常不会造成⿇烦,因为⼤多数命令很快就执⾏完了。如果你要运⾏的命令要花费很长的时间的话,我们通常会把它放到后台,以使我们能在前台继续输⼊其他命令。例如,你输⼊这个命令:
command find / -name "test" > find.out
它将寻整个⽂件系统中的名为test 的⽂件并把结果保存在⼀个叫fing.out的⽂件⾥。如果在前台运⾏的话,根据⽂件系统的⼤⼩,你的shell将有数秒甚⾄数分钟不能使⽤,你不想这样的话可以再输⼊以下⾯的内容:
control-z
bg
find 命令⾸先被挂起,再在后台继续被执⾏,并且你能马上回到bash下。
⽤户化配置bash
本⽂已经描述了许多⽤户化配置bash的⽅法(例如上⾯我们刚刚提到的命令PS1="/t// " )。但知道现在为⽌,我们所做的改动都仅在当前运⾏的bash下才有效。⼀旦退出系统,所有的改动也随之消失了。为了保存这些⽤户化配置,你必须把它们保存到⼀个bash的初始化⽂件⾥。
你能把任何想每次进⼊bash都执⾏的命令放到初始化⽂件⾥。这个⽂件⾥最常见到的命令通常是alias和变量的初始化。bash的初始化⽂件叫做 profile。每个使⽤bash的⽤户都有⼀个 .profile⽂件在他的⽤户⽬录⾥(也可能是.bash_profile)。bash在每次启动时都读取这个⽂件,并执⾏所有包含的命令。
下⾯的代码是缺省的.profile⽂件的内容。这个⽂件的位置在 /etc⽬录。如果你想设置⾃⼰的bash 的话把它拷到你的⽤户⽬录⾥(如果还没有的话)并命名为.profile。
注意:有些setup程序会在建⽴⽤户时⾃动放⼀个.profile⽂件的拷贝在你的⽤户⽬录⾥。但是并不是所有的都这么做,所以最好先检查⼀下你的⽤户⽬录。记住所有以句点开头的⽂件都是隐含的,只有⽤ls -a或ls -A命令才能列出。
# commands common to all logins
export OPENWINHOME=/usr/openwin
export MINICOM="-c on"
export MANPATH=/usr/local/man:/usr/man/preformat:/usr/man:/X11/man:/usr/openwin /m
an
export HOSTNAME="`cat /etc/HOSTNAME`"
PATH="$PATH:/usr/X11/bin:$OPENWINHOME/bin:/usr/games:."
LESS=-MM
# I had problems using 'eval test' instead of 'TERM=', but you might want to
# try it anyway. I think with the right /etc/termcap it would work great.
# eval 'tset -sQ "$TERM"'if [ "$TERM" = "" -o "$TERM" = "unknown"]; then TERM=linux
#PS1=''hostname':'pwd'# `
if [ "$SHELL" = "/bin/pdksh" -o "$SHELL" = "/bin/ksh" ]; then
PS1="! $"
elif [ "$SHELL" = "/bin/zsh" ]; then
PS1="%m:%~%# "
elif [ "$SHELL" = "/bin/ash" ]; then
PS1="$ "
else
PS1='/h:/w/$ `
fi
PS2='> `
ignoreeof=10
export PATH DISPLAY LESS TERM PS1 PS2 ignoreeof
umask 022
# set up the color-ls environment variables:
if [ "$SHELL" = "/bin/zsh" l; then
linux执行shell命令
eval 'dircolors -z'
elif [ "$SHELL" = "/bin/ash" l; then
eval 'dircolors -s'
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论