FreeBSD Shell和ls

Freebsd下默认是有3种shell,sh,和csh,tcsh

setenv 和 set 是在csh系列的命令,当然bash中也有set,还是有出入的。

freebsd# cat /etc/shells
/bin/sh
/bin/csh
/bin/tcsh

 

查看当前用啥shell

set 是对当前进程有效,不会传递给子进程

freebsd# echo $0
-csh
freebsd# echo $SHELL
/bin/csh

setenv 不仅对当前进程有效,也会传递给子进程。

sh shell最大的问题就是不支持tab补全。这个就真的没法使用了。我就不考虑他了。但是默认的Freebsd的用户,好像都是sh shell。

 

修改shell,比较简单。

语法

chsh

  1. set name=value 或者 set name=(value1 value2 ... )
  2. setenv name value 或者 setenv "value1 value2 ... "

 

#Changing user information for root.
Login: root
Password: $1$Mu2cQb9V$mSlndXQkYa77yM0wgN4sF0
Uid [#]: 0
Gid [# or name]: 0
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /root
Shell: /bin/csh
Full Name: Charlie &
Office Location:
Office Phone:
Home Phone:
Other information:

setenv 相当于bash中的export

把上面这行修改,推出就再登陆就ok,永久修改shell为csh。

 

csh shell,ls是没有颜色的,这我也很不习惯。

有几篇文章

解决的办法很简单

================

freebsd# vi /root/.cshrc

Linux环境变量设置set setenv alias的异同

最后加上这个就ok,这样和别的linux显示颜色基本都是一样。

1.说明

setenv CLICOLOR 1
setenv LSCOLORS ExGxFxdxCxegedabagExEx

  使用set和setenv命令可以设置shell选项或者列出shell变量,其中setenv 是csh的命令,在bash中用export命令,alias作用相当windows下的快捷方式。

修改完后

2.语法格式

freebsd# source ~/.cshrc

set 变量名 = 内容

这时候,看目录的颜色就和linux一样了。

set 变量名 =(内容1 内容2 )

Bash shell

set 变量名 ="内容1 内容2"setenv 变量名 内容

linux发行版一般都是带bash shell。iRedMail也是需要使用bash shell

setenv 变量名 "内容1 内容2"

freebsd# pkg_add -r bash-static

setenv 变量名 '内容1 内容2'alias 简化名称 原文件名

Fetching ... Done.

alias 简化名称 "原文件名 参数"

这个时候,你查看

  1. 调用set 和setenv 在调用时均需要加"$"符号,表示调用变量所指代的量。

freebsd# cat /etc/shells

alias 直接实用

/bin/sh
/bin/csh
/bin/tcsh
/usr/local/bin/bash
/usr/local/bin/rbash

4.使用事项set的实用范围最广,在环境变量定义的实际使用中,可以涵盖senenv的使用范围,并且也可以覆盖alias,但不如 alias在其使用范围内来得更简化。

如果你希望修改成bash,参考上面的方法就可以,路径就是 /usr/local/bin/bash

  1. 使用实例和验证方法

  2. (1)

  3.  set path =(/usr/bin /usr/local/bin /sbin /bin usr/X11R6/bin $path)
  4. 相当于
  5.  setenv path "/usr/bin /usr/local/bin /sbin /bin usr/X11R6/bin $path"
  6. 但是应用setenv命令却定义path变量时,在某些linux系统中不能有效的完成path定义。验证:如,建立 set path=/sbin 进而执行fdisk(fisk在/sbin路径下),结果可执行。
  7. 建立 setenv path /sbin 进而执行fdisk(fisk在/sbin路径下),结果不一定可执行。
  8. (2)
  9.  setenv userhome1 /home/user/1dir
  10. 相当于
  11.  set userhome1 = /home/user/1dir
  12. 用set命令同样可以定义此类"名词性"变量,完全符合结果验证:如,建立set h=/home, 进而执行 cd $h, 用pwd查看结果。
  13. 建立setenv h home, 进而执行 cd $h, 用pwd查看结果。
  14. (3)
  15. alias用来"动词性"语句的快捷方式,如,alias set60 "setenv DISPLAY 192.168.0.60:0"
  16. alias c clear, 执行c验证结果,可行。
  17. set d =pwd 执行$d验证结果,可行。
  18. setenv d pwd 执行$d验证结果,可行。

当你改变了shell,你的ls的颜色,就需要再设置。

6.延伸以上均为cshrc环境变量,在linux下默认bsh,二者之间的在实际使用中的基本点如下:

最简单的办法,就是在root目录下。

(1). bsh和csh的不同假如习惯了linux的bash,那么继续用。 

创建 .bash_profile

  如果厌倦了bash或者没用过任何shell,推荐用tcsh. bsd的tcsh非常出色,尤其极其智能的命令历史回滚和Tab命令补全有机结合起来。

export CLICOLOR="yes"

(2). 如何变bsh为csh修改/etc/passwd 文件中对应于用户的那一行的最后一项, 将'/bin/bash' 改为 '/bin/csh'新建用户时,在linux中,会将所需的配置文件从/etc/skel拷贝到用户主目录中,/etc/skel保存着所有用户都共享 的缺省文件,如.bashrc,.bash_profile

这样就ok,颜色看起来不是太好看。

 

图片 1

================

set和setenv的区别

这里讨论的是tcsh中变量及环境变量时set和setenv命令的区别
set语法set name=value
setenv语法setenv name value
最大的区别是,set变量只对当前进程有效,不会传递给子进程
setenv变量不仅对当前进程有效,而且会传递给子进程
而当同时使用set和setenv设置一个变量时,当前进程中,会优先使用set设置的值
如下面的tcsh代码所示
  1. linux-r9f7 /home/myname> set VARY="set use set"
  2. linux-r9f7 /home/myname> setenv VARY "set use setenv"
  3. linux-r9f7 /home/myname> echo $VARY
  4. set use set
  5. linux-r9f7 /home/myname> echovary
  6. set use setenv
  7. linux-r9f7 /home/myname> source ~/bin/echovary
  8. set use set
  9. linux-r9f7 /home/myname> cat ~/bin/echovary
  10. #!/bin/tcsh
  11. echo $VARY
  12. linux-r9f7 /home/myname> setenv ANOTHER "set use setenv"
  13. linux-r9f7 /home/myname> echo $ANOTHER
  14. set use setenv
  15. linux-r9f7 /home/myname>

 

    1. linux-r9f7 style="color: #0000cc;">/home style="color: #0000cc;">/myname style="color: #0000cc;">> cat style="color: #0000cc;">~ style="color: #0000cc;">/bin style="color: #0000cc;">/echovary

    2. #! style="color: #0000cc;">/bin style="color: #0000cc;">/tcsh

    3. echo $VARY

 

在Bash中也有类似的区别
BASH不需要显示声明变量使用=号直接能声明并初始化变量,但是如果没有export,是不能被子进程使用的。

 

================

扩展

================

shell文件中set setenv source

刚开始用Linux,很多东东不太明白。应该仔细研究一下。shell的配置文件是.cshrc和.csh_profile,其中.cshrc中最多用到的三个命令是set setenv source。

set主要是用来设置变量,这里的变量是普通变量,就像C语言里一样,使用一个变量以前要申明一下。

setenv 中的env就是环境environment的简写,这个命令是用来设置环境变量的,譬如说设置文件路径、本地显示啊什么的,举个例,如果想调用服务器的软 件在本地显示,用这个命令:setenv DISPLAY 1xx.1xx.1xx.1xx:0 。在bash中export命令和csh中的setenv命令类似。

alias是用于对命令起别名,就好像给某人起个外号一样,然后叫人家外号,那个人就知道在叫他了。一般unix中诸如此类的命令都有这般形式:

command destination source

举例说明alias用法

alias zz exit

当你在Linix提示符下输入zz和输入exit的结果是一样的

一、SHELL的功能及分类

SHELL 是UNIX作业系统中的''命令编译器''(Command Inter-preter),它基本上是一个常驻的执行程式,它在使用者一签入成功後就立即被载入(可在签入後以ps指令看到),主要功能则在於接受使用 者的指令、寻找命令(即档案)的所在并加以执行。因此,SHELL的不同可能直接影响使用者输入指令的方式、档案寻找的程序及速度等。

UNIX 作业系统的SHELL大致可分为两大系统,一是1970年代前期由美国贝尔实验室(BELL LAB)所发展的sh(Bourne Shell),它是UNIX系统中的标准SHELL,此一系统後来又发展出ksh(Korne Shell)、bash(Bourne Again Shell)等功能更多的介面;另一系统是美国柏克来大学(Berkekey)在1970年代後期所发展的csh(C Shell),和它属於同一系统的有tcsh等。

无 论上述的那一种shell,它的基本功能与作用都是相同的,它们之间的不同处可能在於对同一动作处理程序上的不同(会影响命令处理的速度)、所提供内键命 令及变数的或多或寡等,其中内部命令与变数的多寡直接影响到shell功能的多寡,是使用者在使用时最容易直接感受到的。

在UNIX系统中,使用者可视自己的需要执行sh、ksh、bash、csh或tcsh来代替原先使用的shell、改变正在使用的环境;也可以用''chsh''指令、输入想使用的shell的路径及名称(如/bin/csh,在Y11-Y14机器上还需输入个人使用者的密码),改变以後每次login时所使用的shell、使自己所使用的环境能最满足自己使用上的需要。

二、SHELL 的START FILES

不管你的login shell是那一种shell,每一个shell都有它自己的start files,我们设定理想环境时所需使用的指令与设定的变数,都可以写在这些start files中,在login时先後加以执行,这些start files的名称分别是:

SHELL START FILES

sh /etc/profile

$HOME/.profile

bash /etc/profile

$HOME/.profile(or $HOME/.bashrc)

csh None

$HOME/.cshrc & $HOME/.login

tcsh None

$HOME/.cshrc(or $HOME/.tcshrc)

& $HOME/.login

如果这些档案都存在,那麽它们的执行顺序将是:

  1. sh系列 /etc/profile --> $HOME/.profile

  2. csh系列 $HOME/.cshrc --> $HOME/.login

在 这些start files中,/etc下的profile是系统管理者为大家设定的,一般使用者无法做任何更动,如果对系统管理者的设定觉得不够或不符需要,则可在个人 帐号下的.profile、.cshrc、.login增加或修正,尤其是对csh及tcsh的使用者而言,因为在/etc下并没有start files,所以也不会有系统管理者设定好的环境可以使用,使用者就必须自行设定所需要的所有的变数与指令,否则常会有寸步难行的感觉,最常见的如许多指 令都因找不到而不能用(因为没有设path)、键无法使用(因键的作用没有定义)...等。

三、常见的需求与常用的指令

当我们在UNIX环境中工作,常会为了使自己使用时更方便而产生某些需求,这些常见的需求及其设定方式如:

  1. 希望键能有作用

在$HOME/.profile或$HOME/.cshrc中加上stty erase "^H"

  1. 希望在UNIX环境中能使用中文

在$HOME/.profile(sh系列)中加上

stty -istrip cs8

LC_CTYPE=ISO_8859_1

export LC_CTYPE

在$HOME/.cshrc(csh系列)中加上

stty -istrip cs8

setenv LC_CTYPE iso_8859_1

  1. 希望能有像DOS系统中DOSKEY的功能   只要是使用bash及tcsh即具备此项功能。

  2. 希望能使用工作站上的汉书编辑器(he)

在$HOME/.profile(sh系列)中加上

LANG=big5

export LANG

在$HOME/.cshrc(csh系列)中加上

本文由必威官网登录发布于游戏系统,转载请注明出处:FreeBSD Shell和ls