macOS中的終端命令

1、由macOS配置環境變量引申的問題

通常在macOS上配置環境變量,比如配置maven的環境變量,是這樣的操作的。在用戶的目錄下面,找到或者新建 .bash_profile 文件,然後按照如下配置:

export MAVEN_HOME=/Users/name/downloads/apache-maven-3.8.1
export PATH=$PATH:$MAVEN_HOME/bin
export PATH=$PATH:/usr/local/mysql/bin
export PATH=$PATH:/opt/homebrew/bin

使用source命令重新載入一下,

source .bash_profile

這樣這終端輸入 mvn 命令,即可執行對應的maven命令了。過了一段時間發現,每次啓動終端時候,都需要重載一下 .bash_profile 文件才能使環境變量生效。解決方法:找到或者新建文件 .zshrc ,添加下面一段:

source ~/.bash_profile

每次終端啓動時,就會自動重載。

實際上遇到這類問題,是因爲對操作系統和Bash的不熟悉,零零碎碎的“解決方法”,只能短暫的解決問題。這裏總結下macOS終端上常用的Bash命令,旨在熟悉常見的cv腳本的配置原理。

2、Bash 簡介

Bash是Linux 和 Unix系統的一種命令行環境(cli),解釋輸入的命令,具有完整的變量賦值、條件判斷、循環操作等語法。命令行環境有很多,使用macOS查看支持的命令行環境:

cat /ect/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

其中Bash是大多數Linux發行版的默認的命令行環境。在macOS中,從Catalina 版開始,Mac 將使用 zsh 作爲默認命令行環境。zsh 與 Bourne Shell (sh) 高度兼容,並且與 bash 基本兼容,但存在一些差別。具體參見

查看當前的環境使用命令:

echo $SHELL
/bin/zsh

3、常用的Bash命令

 1、輸入與輸出

echo命令用於打印一行或一段文本。

bash-3.2$ echo hi
hi

read命令用於獲取用戶的輸入內容。

bash-3.2$ read i && echo $i
hi  //輸入內容
hi  //輸出內容
bash-3.2$ 

2、語句操作符

分號 ; 是命令的結束符,同行表示緊接着執行下一條命令:(無論第一條命令是否成功,下一條都會執行與之不同的是 && ||)

read i;echo $i

與&& ,與編程彙總的布爾操作符類似,第一條命令執行成功後,執行第二條命令;

read i && echo $i

或|| ,表示第一條命令執行失敗後,執行第二條命令;

read i || echo $i

 

3、區分命令類型

有些命令是系統自帶的,有些命令是在外部程序添加到環境變量後運行的,使用type命令區分內置命令和外部程序。

bash-3.2$ type echo
echo is a shell builtin
bash-3.2$ type mysql
mysql is /usr/local/mysql/bin/mysql

4、Bash變量

變量分爲環境變量與系統變量。使用env命令顯示環境變量,

env

創建變量直接申明變量名即可,注意賦值操作不可加空格,

i=1
echo $i  //1

讀取變量使用 $+變量名即可,如上所示。

export 命令 用於向不同的終端之間傳遞變量。在 zsh 下定義變量,使用export命令在bash也能獲取到。

export MAVEN_HOME=/Users/name/downloads/apache-maven-3.8.1

可以看到環境變量腳本中定義的 MAVEN_HONE 變量使用了export。

5、bash歷史記錄

bash會記錄命令的歷史記錄,在macOS系統中保存在隱藏的文件 .bash_history文件中。並且對應的命令行環境均有對應記錄文件。

 

 history 命令同樣顯示使用過的命令記錄,

history   
.
.
.
98  echo $i
99  history

 6、source 命令

source命令用於重新加載一個配置文件,

source ~/.bash_profile

表示重新加載.bash_profile中配置的環境變量。

4、macOS中環境變量的生效順序

使用交互式命令行環境時,每次啓動一次命令行環境,都會開啓一次Session對話,按照登錄的狀態可分爲登錄的Session和非登錄的Session。

在Linux中登錄的session會初始化系統環境,初始化的順序依次爲:(注意用戶級的配置腳本,第一個加載成功後,不再加載後續腳本文件。)

  • 系統級:/etc/profile 、/etc/paths ;
  • 用戶級:~/.bash_profile 、~/.bash_login 、~/.profile 、~/.bashrc 。

Linux中非登錄的Session,不會進行環境的初始化。初始化的腳本加載順序爲:

  • /etc/bash.bashrc:對全體用戶有效。
  • ~/.bashrc:僅對當前用戶有效。

在macOS中,我們打開的終端均爲非登錄的Session。因此每次啓動終端,都會加載.bashrc 或 .zshrc文件, 這也是上述爲何將重載命令source ~/.bash_profile 寫入 .zshrc 的原因。 

 

參考鏈接:

1、https://support.apple.com/zh-cn/HT208050

2、https://wangdoc.com/bash/index.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章