我在之前的一篇安装node的笔记里面安装node的时候,有用到source这个命令来让配置文件生效。

有一次我在朋友的ubuntu机器上安装的时候,报source: command not found这个错。

奇怪,怎么会没有source命令,我想到sourcebash里面的,会不会当前不是bash?于是我得查看一下当前使用的shell环境

查看当前使用的是什么shell

使用命令echo $SHELL

结果是/bin/sh

查看机器当前使用的shell

查看机器上装的所有shell环境

使用命令cat /etc/shells

查看机器上装的所有shell环境

切换shell

使用命令chsh -s /bin/bash,将shell切换到bash

切换到bash后,就可以使用source命令了


bash与sh的区别

bash可以理解为是sh的超集。sh里面可以执行的,都可以在bash里面执行。


source../

source命令等同于.点命令,但是../是不同的,./表示当前目录。

  • source命令的用法
    • 在当前bash环境下读取并执行FileName中的命令。该filename文件可以无执行权限
  • ./的用法
    • 打开一个子shell来读取并执行FileName中命令。该filename文件需要执行权限

实际使用的时候,建议用source命令取代点命令,具体看下面的例子

举个例子:

我vim新建一个文件testsource.sh,在这个文件里面写上echo $SHELL,然后保存退出。

这个testsource.sh的权限如下图,即没有可执行权限

查看该文件的权限

我运行命令source testsource.sh,打印出结果如下:

source testsource.sh的运行结果

但是我如果运行.testsource.sh,报错如下:

.testsource.sh的运行结果

如果我运行..testsource.sh, 报错如下:

..testsource.sh的运行结果

如果我运行./testsource.sh,报错如下图,是文件的权限问题,因为文件没有可执行权限

./testsource.sh的运行结果

因为source命令等同于点命令,所以点命令与后面的文件之间**必须要有空格**

我运行. testsource.sh或者. ./testsource.sh的时候,才会运行成功,如下图所示

有空格的运行结果1

有空格的运行结果2

所以我上面说实际使用的时候,最好用source命令代替点命令。


bashrc与bash_profile的区别

上面提到了source命令,下面说一下bashrcbash_profile的区别

外国人写的这篇文章解释得还挺清楚的,可以看看。嫌太烦的可以看我下面举的例子

先说一些两个概念:login shellno-login shell

  • login shell
    • 当你通过终端输入用户名和密码,然后进入到terminal,这时候进入的shell环境就叫做是login shell,例如,通过ssh远程进入到主机。
  • no-login shell
    • 就是不需要输入用户名密码而进入的shell环境,例如你已经登陆了你的桌面电脑,这时候在应用管理器中找到termianl图标,然后双击打开终端,也就是通过像gnome,KDE这种桌面环境而进入的终端,这时候你进入的shell环境就是所谓的no-login shell环境。但是在Mac OS系统里面,每次运行terminal的时候,系统默认会给一个login shell环境。

~/.bashrc属于no-login shell会被用到的文件,当登录时以及每次打开新的shell时,该文件被读取。

~/.bash_profile属于login shell会用到的文件,当用户登录时,该文件仅仅执行一次,默认情况下,它用来设置一些环境变量。

之前说过在Mac OS里面默认都是login Shell环境,所以~/.bashrc文件用不到。但如果想在~/.bashrc里面写配置并且被用到,则在~/.bash_profile里面写上如下代码,那么在terminal读取~/.bash_profile文件的时候,也会加载~/.bashrc

if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi

安装oh-my-zsh

本文最上面查看本机所有的shell的时候,还看到一个zsh。为了让terminal比较好看一点,我安装了oh-my-zsh

具体的安装方法如下:

  1. 如果你的环境里面没有/bin/zsh,需要安装zsh,可以用sudo yum install zsh命令安装。不过我是Mac,就自动省略了这一步
  2. 执行wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O - | sh自动安装oh-my-zsh
  3. 改变默认使用的shell为zsh。执行命令chsh -s /bin/zsh
  4. 重启终端

这就生效了,如果你想要更改zsh的主题,可以这样:

  • vim ~/.zshrc文件,设置主题ZSH_THEME为你喜欢的主题。默认是robbyrussell
  • source ~/.zshrc

系统会问你是否要更新zsh,你输入y就行

系统会问你是否要更新zsh