顯示具有 mac 標籤的文章。 顯示所有文章
顯示具有 mac 標籤的文章。 顯示所有文章

2022年2月11日 星期五

自訂 Linux 的 Bash Shell 命令提示字串 Prompt

如何在 Linux 或 Unix 操作系統下更改 shell 提示的顏色?如何在 Linux、macOS 或類 Unix 系統上自定義和著色我的 Bash 提示符 PS1

我們可以更改 shell 提示符的顏色,或者在命令提示符下讓工作變得更輕鬆。BASH shell 是 Linux 和 Apple OS X 下的預設的設置。現在讓我們看看在 Linux 或 Unix 系統上使用 bash 時如何更改 shell 提示的顏色。

基本設定方法

Linux 的" Bash Shell 命令提示字串可以透過 PS1 這個環境變數來設定,通常他都是寫在 ~/.bashrc 或是 ~/.bash_profile 這些 Bash 的設定檔中,通常預設的設定會類似這樣:

PS1="\u@\h \W$ "

PS1 的設定中,若以反斜線加上一個特定字母,都有一些特殊意義:

  • \u:表使用者的帳號名稱。
  • \h:主機名稱。
  • \W:目前的工作目錄名稱。

顯示出來的結果會像這樣:

通常剛裝好的 Linux 系統,命令提示字串大概就是像這樣,沒有什麼特別,但是其實它的功能很強大,可以有很多的變化,以下是一些常用的功能介紹。

顯示時間

PS1 環境變數中,您可以使用 $(linux_command) 的方式,直接執行任何的 Linux 指令,下面是一個執行 $(date) 來顯示目前時間的例子。

PS1="\u@\h [$(date +%k:%M:%S)]> "

結果會像這樣:

另一種方式是直接使用 \t,則可以顯示 hh:mm:ss 格式的時間,例如:

PS1="[\t] \u@$(pwd)> "

而 \@ 則是可以顯示 12 小時制的時間:

PS1="[\@] \u@$(pwd)> "

任意指令輸出

如果您對於 shell 的程式設計很熟悉的話,可以在 PS1 插入任何的指令輸出或是變數:

kernel_version=$(uname -r)
PS1="\!|\h|$kernel_version|$? > "

文字顏色

命令提示字串也可以使用彩色的文字:

PS1="\e[0;34m\u@\h \w\e[0m > "

這裡文字的色彩是靠 ANSI escape code 來指定的,\e[0;34m 是顏色指定的開始控制碼,結束是 \e[0m,而在放這中間的所有文字都會是有顏色的,而文字的顏色則是由開始控制碼中的數值來決定:

  • 0 與 1:0 代表正常亮度,1 代表高亮度。
  • 30 與 37:30 + x 所得到的數值可指定前景顏色(x 值與顏色的對應請參考下面的對應表)。
  • 40 與 47:40 + x 所得到的數值可指定背景顏色(x 值與顏色的對應請參考下面的對應表)。
  • 多個數值之間以分號(;)隔開,像這裡的 \e[0;34m 就是指定正常亮度(0),顏色為藍色(34 = 30 + 4),結果會像這樣:

    這是使用高亮度(1)的狀況:

    PS1="\e[1;34m\u@\h \w\e[0m > "

    加上背景的顏色:

    PS1="\e[0;34;47m\u@\h \w\e[0m > "

    使用多種顏色:

    PS1='\e[1;37m\t\e[0m\n\e[1;32m\u\e[1;33m@\e[1;32m\h\e[33m:\e[1;36m$(pwd)\e[1;33m\$\e[0m '

    PS1 特殊字元

    以下這些是在 PS1 中可以使用的特殊字元,您可以用運這些設計自己的命令提示字串。

    • \a:ASCII bell 字元(07)。
    • \d:格式為 Weekday Month Date 的日期(例如 Tue May 26)。
    • \D{format}:將 format 傳給 strftime(3),然後將輸出的結果放進命令提示字串中,如果 format 是空字串,就會使用目前語系的預設的格式,其中的大括號不可以省略。
    • \e:ASCII 跳脫字元(escape character,033)。
    • \h:機器的簡短主機名稱(hostname),只顯示到第一個句點之前。
    • \H:機器的完整主機名稱(hostname)。
    • \j:目前的 shell 所掌控的 jobs 數量。
    • \l:the basename of the shell’s terminal device name。
    • \n:換行。
    • \r:carriage return。
    • \s:the name of the shell, the basename of $0 (the portion following the final slash)。
    • \t:現在時間,24 小時制(HH:MM:SS)。
    • \T:現在時間,12 小時制(HH:MM:SS)。
    • \@:現在時間,12 小時制(HH:MM AM/PM)。
    • \A:現在時間,24 小時制(HH:MM)。
    • \u:目前使用者的使用者名稱(username)。
    • \v:目前的 bash shell 版本(如 2.00)。
    • \V:目前的 bash shell 詳細版本(如 2.00.0)。
    • \w:目前的工作目錄完整路徑,若在 $HOME 中,則以 ~ 顯示。
    • \W:目前的工作目錄名稱,若在 $HOME 中,則以 ~ 顯示。
    • \!:目前指令的歷史紀錄編號。
    • \#:目前指令的編號。
    • \$:如果是 root 管理者,則顯示 #,否則顯示 $。
    • \n:以八進位表示字元,例如 33。the character corresponding to the octal number nnn。
    • \\:反斜線。
    • [ 與 ]:當 PS1 參雜一些無法顯示的字元時,就要用這兩個特殊字元包起來,這樣顯示才會正常,例如所有控制顏色或是格式的控制碼,都要加上這兩個特殊字元,這樣可以避免 bash 在計算提示字元長度時出錯。

    只要善用這些特殊字元,其實就可以讓自己的命令提示字串有許多的變化。

    2021年6月1日 星期二

    在 MacBook 上設定 zsh

    從 macOS Catalina 版開始,Mac 使用 zsh 做為預設登入 shell 。想要把舊版 macOS 中將 zsh 設為預設 shell。更改的方式大概有兩種。

    A. 從『使用者與群組』

    1. 從系統偏好設定進去後,找到「使用者與群組」,解開左下角的鎖頭。
    2. 按住 control 鍵,將滑鼠移到你的帳號上面,並點左鍵,就會出現「進階選項」。
    3. 更改「登入 sheel」即可。

    B. 使用命令列

    直接開啟終端機,輸入以下指令:

    $ which zsh
    /bin/zsh
    $ chsh -s /bin/zsh

    改用了 zsh 之後接著就請參考以下的說明,來修改 zsh 原生平凡的外觀。

    zsh 真正簡單設定

    起因

    Apple 宣佈在 macOS 10.15 Catalina 中,默認 shell 將是 zsh。zsh(我相信它的發音是 zee-shell,雖然 zish 說起來很有趣)將取代 bash 作為默認 shell。 自 Mac OS X 10.3 Panther 以來,bash 一直是默認 shell,所以從 bash 改變到 zsh 是未來的趨勢。

    為了達成目標,在網路上找到了一個系列文章 - Moving to zsh
    作者一樣是 Mac 的使用者,也是一樣的原因出了這一系列的文章。建議有機會詳讀。

    這一系列的其中一篇 part 6 – Customizing the zsh Prompt 正是介紹外觀的客制化設定。而且確定沒有叫我安裝任何多餘的東西。

    在你的 .zshrc 文件中,新增

    PROMPT='你的設定'
    其中:
    • PROMPT: 代表 bash 的 export PATH
    • '你的設定': 設定的值必須要是字串格式

    查色碼

    若想使用不同的顏色在 zsh 的 console 裡面顯示,必須先查閱這個顏色的色碼,這個色碼可以從網站「256 COLORS - CHEAT SHEET」裏查詢。

    設定顏色

    %F{2}%m%f
    其中:
    • %F{色碼}:用來設定某個顏色的開始。
    • %f:用來設定成預設的樣式,也可以說是設定好的顏色結束。
    • %m:主機名稱,在此只是示範夾在顏色中間的東西。

    zsh Prompt Expansion

    網址:zsh:13 Prompt Expansion, 13.2.5 Visual effects

    我的 PROMPT 長這樣

    PROMPT='%F{226}%n%f%F{82}%B@%b%f%F{226}%m%f%F{82}%B:%b%f%F{226}%/%f > '
    • %n:值為 $USERNAME
    • %B:開始粗體字
    • %b:結束粗體字
    • %m:值為第一個 . 之前的 hostname
    • %/:值為從根目錄開始的 $PATH

    2021年2月19日 星期五

    Homebrew:Mac 必裝的套件管理工具

    Homebrew 可以做什麼?

    Homebrew 可以在 Mac 上安裝系統沒有的套件,例如 Wget 這種工程師常用的軟體。不過 Homebrew 不是只有工程師才用的到,一般常見的軟體、下載 YouTube 的程式,其實都可以透過 Homebrew 來取得。 Homebrew 也有點像是 Ninite 這套軟體,我們不需要搜尋軟體的官方網站,並手動下載、安裝軟體。尤其是許多需要註冊登入才能下載的軟體,例如:Adobe Creative Cloud、Microsoft Office 都可以透過 Homebrew 來搜尋並安裝。

    安裝 Homebrew

    在 Mac 的終端機貼上以下指令:
    /usr/bin/ruby -e $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)

    安裝套件

    安裝套件的方式很簡單,例如安裝 Wget 一樣透過指令:
    brew install wget

    更新套件

    brew update && brew upgrade && brew cleanup
    一氣呵成的指令內容分別是: brew update:更新 Homebrew 及套件清單 brew upgrade:更新所有套件 brew cleanup:清除暫存檔 不過在 brew 軟體清單內可能大部分都是比較「工程」的套件,因此如果要安裝一些「尋常」的軟體,我們可以安裝 Homebrew-Cask 這套軟體,來取得更多的應用程式。

    安裝 Homebrew-Cask

    輸入指令:
    brew tap caskroom/cask

    搜尋可以安裝的軟體

    假設我們想要尋找 Adobe 系列,可以輸入指令:
    brew search adobe
    Homebrew-Cask 就會列出所有可以安裝的 Adobe 應用程式。

    安裝軟體

    接著,安裝一般軟體就很簡單了,例如 Google 瀏覽器:
    brew cask install google-chrome
    網路上有許多教學特別註明,必須透過某些指令,去設定安裝軟體的路徑。筆者撰文時,測試了最新版 Homebrew-Cask 安裝軟體,跟安裝一般 Mac 軟體,預設的路徑就在「應用程式」資料夾,因此應該不需要額外修改。

    更新軟體

    列出需要更新的軟體
    brew cask outdated

    更新指定軟體

    brew cask install --force google-chrome

    一次找出需要更新的軟體並更新

    brew cask install --force $(brew cask outdated | awk '{print $1}' | xargs) 

    移除軟體

    brew cask uninstall google-chrome