在翻看Monica Powell的博客中發(fā)現(xiàn)了了比較有意思的東西。決定在我的iterm2也加上它。
確保 oh-my-zsh 已經(jīng)安裝在你的系統(tǒng)上。如果你還沒(méi)有安裝 oh-my-zsh,你可以通過(guò)以下命令安裝:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
或者使用 wget:
sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
如果你已經(jīng)安裝,你可以切換 oh-my-zsh (omz) 和 Bash
從 oh-my-zsh 切換到 Bash
chsh -s /bin/bash
這將修改默認(rèn)shell為 bash。
或者運(yùn)行以下命令來(lái)立即切換到 bash:
bash
從 Bash 切換到 oh-my-zsh
chsh -s /bin/zsh
請(qǐng)注意,/bin/zsh 可能根據(jù)你的系統(tǒng)安裝位置有所不同。
或者運(yùn)行以下命令來(lái)立即切換到 zsh:
zsh
在切換 shell 之前,請(qǐng)確保你了解這些操作,因?yàn)樗鼈儠?huì)改變你的終端行為和配置。每次切換后,你可能需要重新配置環(huán)境變量或別名,因?yàn)樗鼈兺ǔT?.bashrc 或 .zshrc 文件中設(shè)置。
設(shè)置靜態(tài) ASCII 字符圖案
讓我們的iterm2終端 每次啟動(dòng)或者新開一個(gè)窗口,它就會(huì)輸出下面的字符圖案;
它是這樣的
_ _ _ _ __ __ _ _ _
| | | | ___| | | ___ \ \ / /__ _ __| | __| | |
| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | |
| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_|
|_| |_|\___|_|_|\___/ \_/\_/ \___/|_| |_|\__,_(_)
或是這樣的
/^--^\ /^--^\ /^--^\
\____/ \____/ \____/
/ \ / \ / \
KAT | | | | | |
\__ __/ \__ __/ \__ __/
|^|^|^|^|^|^|^|^|^|^|^|^\ \^|^|^|^/ /^|^|^|^|^\ \^|^|^|^|^|^|^|^|^|^|^|^|
| | | | | | | | | | | | |\ \| | |/ /| | | | | | \ \ | | | | | | | | | | |
########################/ /######\ \###########/ /#######################
| | | | | | | | | | | | \/| | | | \/| | | | | |\/ | | | | | | | | | | | |
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|
通過(guò)瀏覽ASCII Art Archive或Text to ASCII Art Generator (TAAG)尋找你喜歡的字符圖案,也可以自己自定義個(gè)性的字符圖案。
[ASCII art] is the most universal computer art form in the world — every computer system capable of displaying multi-line text can display ASCII art, without needing to have a graphics mode or support a particular graphics file format. — ASCII Art Archive
程序員就喜歡在控制臺(tái)或終端里加些有趣的東西,這應(yīng)該算是計(jì)算機(jī)抽象藝術(shù)吧。
在你的~/.zshrc文件或ZSH 主題文件中打開,將每一行單獨(dú)復(fù)制,并加上echo 命令。
如果你已經(jīng)安裝了oh-my-zsh (omz)環(huán)境,以下是主題文件可能所在的路徑:
~/.oh-my-zsh/themes/
如果你已經(jīng)使用了zsh,你可以在~/.zshrc文件中看到類似以下內(nèi)容:
ZSH_THEME="robbyrussell"
這里的"robbyrussell"是默認(rèn)主題的名稱。這個(gè)名稱對(duì)應(yīng)于~/.oh-my-zsh/themes/robbyrussell.zsh-theme 文件。
# ~/.zshrc OR your zsh theme file
echo " ___"
echo "|[_]|"
echo "|+ ;| "
echo "\`---'"
[!TIP]
需要對(duì)無(wú)法打印的字符使用反斜杠\進(jìn)行轉(zhuǎn)義,否則無(wú)法在iterm2上正確打印。
如果你想創(chuàng)建自己的主題,你可以創(chuàng)建一個(gè)新的.zsh-theme文件在~/.oh-my-zsh/themes/目錄下,然后修改.zshrc文件中的ZSH_THEME變量來(lái)使用你的新主題。
確保在修改配置文件后,運(yùn)行以下命令來(lái)使更改生效:
source ~/.zshrc
[站外圖片上傳中...(image-f19b0d-1731902012902)]
復(fù)制的內(nèi)容太多怎么辦?
不知道哪些字符需要轉(zhuǎn)義怎么辦?
那么,
可以使用 在線 JSON 校驗(yàn)格式化工具,里面有轉(zhuǎn)義選項(xiàng),可以一鍵轉(zhuǎn)義,要一行行的復(fù)制轉(zhuǎn)義,記得符合JSON格式哦。
結(jié)合變量使用
除了打印靜態(tài)信息外,還可以根據(jù)變量(例如時(shí)間)的值顯示不同的信息。要確定當(dāng)前小時(shí),可以使用以下命令:
date +"%H"
18 # output at 6PM
根據(jù)當(dāng)前小時(shí)返回不同的greeting值,通過(guò)檢查當(dāng)前小時(shí)是否-ge(大于或等于)或-le(小于或等于)定義的特定時(shí)間范圍。
# Get the current hour in 24-hour format
hour=$(date +"%H")
# Define time ranges
morning_start=5 # 5 AM
morning_end=11 # 11 AM
afternoon_start=12 # 12 PM
afternoon_end=17 # 5 PM
# Check the time of day and print a message
if [ "$hour" -ge "$morning_start" ] && [ "$hour" -le "$morning_end" ]; then
greeting="Good morning"
elif [ "$hour" -ge "$afternoon_start" ] && [ "$hour" -le "$afternoon_end" ]; then
greeting="Good afternoon"
else
greeting="Good evening"
fi
echo " ___"
echo "|[_]|"
echo "|+ ;| ? $greeting, Monica! ?" # string interpolation
echo "\`---'"
上述腳本輸出了~/.zshrc 一個(gè)歡迎提示,如下圖所示:
[站外圖片上傳中...(image-9b7514-1731902012902)]
根據(jù)一天中的時(shí)間,顯示的輸出是下列消息之一:
- ? Good morning, Monica! ?
- ? Good afternoon, Monica! ?
- ? Good evening, Monica! ?
可以在 GitHub 上的點(diǎn)文件中查看Monica的源碼。
設(shè)置為電腦名稱
只顯示靜態(tài)的名字就很普通,下面我們通過(guò)變量來(lái)獲取當(dāng)前電腦的賬戶名稱
# 使用 scutil 命令獲取電腦名稱
# COMPUTER_NAME=$(scutil --get ComputerName)
# 使用 hostname 命令獲取主機(jī)名
# COMPUTER_NAME=$(hostname)
# 使用 $USER 環(huán)境變量:
username="$USER"
設(shè)置 ASCII 字符顏色
設(shè)置 ANSI 顏色
那么zsh環(huán)境下的iterm2可以打印有顏色的文字

那么我們自己的打印,可以讓打印更好看一點(diǎn),可以使用 ANSI 轉(zhuǎn)義序列來(lái)為控制臺(tái)輸出添加顏色。
在 ANSI 轉(zhuǎn)義序列中,顏色類型通常指的是文本顏色、背景顏色、亮度(例如粗體或非粗體)等。我之前提供的顏色代碼是基于文本顏色和背景顏色的 ANSI 轉(zhuǎn)義序列。下面是詳細(xì)的顏色類型:
- 文本顏色(Foreground colors):
- 30-37: 標(biāo)準(zhǔn) ANSI 文本顏色(例如,30 是黑色,31 是紅色,32 是綠色,依此類推到 37 是白色)
- 90-97: 高亮文本顏色(例如,90 是亮黑色,91 是亮紅色,92 是亮綠色,依此類推到 97 是亮白色)
- 背景顏色(Background colors):
- 40-47: 標(biāo)準(zhǔn) ANSI 背景顏色(例如,40 是黑色背景,41 是紅色背景,42 是綠色背景,依此類推到 47 是白色背景)
- 100-107: 高亮背景顏色(例如,100 是亮黑色背景,101 是亮紅色背景,102 是亮綠色背景,依此類推到 107 是亮白色背景)
- 亮度(Brightness):
- 0: 重置所有屬性(包括顏色)
- 1: 設(shè)置粗體
- 2: 設(shè)置低亮度(不是所有終端都支持)
- 22: 取消粗體(設(shè)置正常亮度)
例如,\033[31m表示紅色文本,\033[32m表示綠色文本,而\033[41m表示紅色背景。
如果你想要了解具體的顏色代碼代表什么顏色,你可以根據(jù)上述列表來(lái)判斷。例如,如果你看到\033[33m,那么這是一個(gè)標(biāo)準(zhǔn)的 ANSI 文本顏色代碼,表示黃色文本。如果你看到\033[43m,那么這是一個(gè)標(biāo)準(zhǔn)的 ANSI 背景顏色代碼,表示黃色背景。
以下是一些基本的顏色代碼示例:
# 重置顏色
reset="\033[0m"
# 文字顏色
red="\033[31m"
green="\033[32m"
yellow="\033[33m"
blue="\033[34m"
magenta="\033[35m"
cyan="\033[36m"
white="\033[37m"
# 背景顏色
bg_red="\033[41m"
bg_green="\033[42m"
bg_yellow="\033[43m"
bg_blue="\033[44m"
bg_magenta="\033[45m"
bg_cyan="\033[46m"
bg_white="\033[47m"
# 打印示例
echo -e "${red}This is red text${reset}"
echo -e "${green}This is green text${reset}"
echo -e "${yellow}This is yellow text${reset}"
echo -e "${blue}This is blue text${reset}"
echo -e "${magenta}This is magenta text${reset}"
echo -e "${cyan}This is cyan text${reset}"
echo -e "${white}This is white text${reset}"
# 帶背景顏色
echo -e "${bg_red}${white}This is white text on a red background${reset}"
請(qǐng)確保在 echo 命令中使用 -e 選項(xiàng),以啟用對(duì)轉(zhuǎn)義序列的解釋。
這些代碼可以在你的 Zsh 腳本或直接在終端中使用。當(dāng)你完成彩色文本的輸出后,使用 reset 變量來(lái)重置顏色,以確保后續(xù)的輸出不會(huì)受到影響。
注意,并非所有的終端都支持所有的顏色代碼,但這些基本的顏色在大多數(shù)現(xiàn)代終端中都是可用的。
更改我們的內(nèi)容:
echo " ___"
echo "|[_]|"
echo -e "|+ ;| ${magenta}? $greeting,$username! ?${reset}"
echo "\`---'"

設(shè)置 24bit 真彩色
但是感覺(jué)還是差點(diǎn)意思,怎么才能像omz更新那樣呢?
于是,我們翻看了omz在我們本地~/.oh-my-zsh/tools/路徑下的upgrade.sh和upgrade.sh文件。
我們找到了定義有關(guān)顏色的源碼:
# Adapted from code and information by Anton Kochkov (@XVilka)
# Source: https://gist.github.com/XVilka/8346728
supports_truecolor() {
case "$COLORTERM" in
truecolor|24bit) return 0 ;;
esac
case "$TERM" in
iterm |\
tmux-truecolor |\
linux-truecolor |\
xterm-truecolor |\
screen-truecolor) return 0 ;;
esac
return 1
}
下面是用于檢查當(dāng)前環(huán)境是否支持真彩色(truecolor)輸出。真彩色指的是能夠輸出 24 位顏色,即能夠顯示 16,777,216 種不同的顏色。
if supports_truecolor; then
FMT_RAINBOW="
$(printf '\033[38;2;255;0;0m')
$(printf '\033[38;2;255;97;0m')
$(printf '\033[38;2;247;255;0m')
$(printf '\033[38;2;0;255;30m')
$(printf '\033[38;2;77;0;255m')
$(printf '\033[38;2;168;0;255m')
$(printf '\033[38;2;245;0;172m')
"
else
FMT_RAINBOW="
$(printf '\033[38;5;196m')
$(printf '\033[38;5;202m')
$(printf '\033[38;5;226m')
$(printf '\033[38;5;082m')
$(printf '\033[38;5;021m')
$(printf '\033[38;5;093m')
$(printf '\033[38;5;163m')
"
fi
當(dāng)調(diào)用
supports_truecolor函數(shù)時(shí),它會(huì)檢查當(dāng)前終端是否支持真彩色。如果支持,函數(shù)返回0;
如果不支持,函數(shù)返回1(在Shell腳本中,返回1通常表示失敗或假)。
下面是我結(jié)合omz源碼,設(shè)置的自定義的ASCII字符圖案:
# 自定義靜態(tài)字符圖案
echo " "
echo "╔══════════════════════════════════════════════════════════════════════════════════════════════╗"
echo "║ ║"
echo "║ dMP dMP dMMMMMP dMP dMP .aMMMb dMP dMP dMP .aMMMb dMMMMb dMP dMMMMb ║"
echo "║ dMP dMP dMP dMP dMP dMP\"dMP dMP dMP dMP dMP\"dMP dMP.dMP dMP dMP VMP ║"
echo "║ dMMMMMP dMMMP dMP dMP dMP dMP dMP dMP dMP dMP dMP dMMMMK\" dMP dMP dMP ║"
echo "║ dMP dMP dMP dMP dMP dMP.aMP dMP.dMP.dMP dMP.aMP dMP\"AMF dMP dMP.aMP ║"
echo "║ dMP dMP dMMMMMP dMMMMMP dMMMMMP VMMMP\" VMMMPVMMP\" VMMMP\" dMP dMP dMMMMMP dMMMMP\" ║"
echo "║ ║"
echo "╚══════════════════════════════════════════════════════════════════════════════════════════════╝"
echo " "
更改彩虹色的ASCII字符圖案:
# Adapted from code and information by Anton Kochkov (@XVilka)
# Source: https://gist.github.com/XVilka/8346728
supports_truecolor() {
case "$COLORTERM" in
truecolor|24bit) return 0 ;;
esac
case "$TERM" in
iterm |\
tmux-truecolor |\
linux-truecolor |\
xterm-truecolor |\
screen-truecolor) return 0 ;;
esac
return 1
}
setup_color() {
# Only use colors if connected to a terminal
if ! is_tty; then
CUSTOM_COLOR_COLORRAINBOW=""
CUSTOM_COLOR_RED=""
CUSTOM_COLOR_GREEN=""
CUSTOM_COLOR_YELLOW=""
CUSTOM_COLOR_BLUE=""
CUSTOM_COLOR_BOLD=""
CUSTOM_COLOR_RESET=""
return
fi
if supports_truecolor; then
CUSTOM_COLOR_RAINBOW=(
"$(printf '\033[38;2;255;0;0m')"
"$(printf '\033[38;2;255;97;0m')"
"$(printf '\033[38;2;247;255;0m')"
"$(printf '\033[38;2;0;255;30m')"
"$(printf '\033[38;2;77;0;255m')"
"$(printf '\033[38;2;168;0;255m')"
"$(printf '\033[38;2;245;0;172m')"
"$(printf '\033[38;2;133;177;255m')"
"$(printf '\033[38;2;225;97;220m')"
"$(printf '\033[38;2;230;230;250m')"
)
else
CUSTOM_COLOR_RAINBOW=(
"$(printf '\033[38;5;196m')"
"$(printf '\033[38;5;202m')"
"$(printf '\033[38;5;226m')"
"$(printf '\033[38;5;082m')"
"$(printf '\033[38;5;021m')"
"$(printf '\033[38;5;093m')"
"$(printf '\033[38;5;163m')"
"$(printf '\033[38;5;196m')"
"$(printf '\033[38;5;213m')"
"$(printf '\033[38;5;255m')"
)
fi
CUSTOM_COLOR_RED=$(printf '\033[31m')
CUSTOM_COLOR_GREEN=$(printf '\033[32m')
CUSTOM_COLOR_YELLOW=$(printf '\033[33m')
CUSTOM_COLOR_BLUE=$(printf '\033[34m')
CUSTOM_COLOR_BOLD=$(printf '\033[1m')
CUSTOM_COLOR_RESET=$(printf '\033[0m')
}
# Use colors, but only if connected to a terminal
# and that terminal supports them.
# The [ -t 1 ] check only works when the function is not called from
# a subshell (like in `$(...)` or `(...)`, so this hack redefines the
# function at the top level to always return false when stdout is not
# a tty.
if [ -t 1 ]; then
is_tty() {
true
}
else
is_tty() {
false
}
fi
print_custom_welcome_log() {
printf "\n"
printf '\n'
printf '╔══════════════════════════════════════════════════════════════════════════════════════════════╗\n'
printf '║ ║\n'
printf '║%s dMP dMP %sdMMMMMP %sdMP %sdMP %s.aMMMb %sdMP dMP dMP %s.aMMMb %sdMMMMb %sdMP %sdMMMMb %s║\n' $CUSTOM_COLOR_RAINBOW $CUSTOM_COLOR_RESET
printf '║%s dMP dMP %sdMP %sdMP %sdMP %sdMP"dMP %sdMP dMP dMP %sdMP"dMP %sdMP.dMP %sdMP %sdMP VMP %s║\n' $CUSTOM_COLOR_RAINBOW $CUSTOM_COLOR_RESET
printf '║%s dMMMMMP %sdMMMP %sdMP %sdMP %sdMP dMP %sdMP dMP dMP %sdMP dMP %sdMMMMK" %sdMP %sdMP dMP %s║\n' $CUSTOM_COLOR_RAINBOW $CUSTOM_COLOR_RESET
printf '║%s dMP dMP %sdMP %sdMP %sdMP %sdMP.aMP %sdMP.dMP.dMP %sdMP.aMP %sdMP"AMF %sdMP %sdMP.aMP %s║\n' $CUSTOM_COLOR_RAINBOW $CUSTOM_COLOR_RESET
printf '║%s dMP dMP %sdMMMMMP %sdMMMMMP %sdMMMMMP %sVMMMP" %sVMMMPVMMP" %sVMMMP" %sdMP dMP %sdMMMMMP %sdMMMMP" %s║\n' $CUSTOM_COLOR_RAINBOW $CUSTOM_COLOR_RESET
printf '║ ║\n'
printf '╚══════════════════════════════════════════════════════════════════════════════════════════════╝\n'
printf '\n'
printf '\n'
echo " ___"
echo "|[_]|"
echo -e "|+ ;| ${CUSTOM_COLOR_YELLOW}? $greeting,$username! ?${CUSTOM_COLOR_RESET}"
echo "\`---'"
}
setup_color
print_custom_welcome_log

制表符
如果你需要再字符圖案周邊加上邊框,你可以使用搜狗輸入法-符號(hào)表情-制表符找到你想要的表格符號(hào)。
┏┳┓╔╦╗╓╥╖
┣╋┫╠╬╣╟╫╢
┗┻┛╚╩╝╙╨╜
┌┬┐╭╮╱╲┃║
├┼┤╰╯╲╱┆┇
└┴┘━═┅┈╳

參考資料
Monica's Digital Playground
Custom ZSH Startup Message
ASCII Art Archive
ASCII Art Game consoles - asciiart.eu
Text to ASCII Art Generator (TAAG)
在線 JSON 校驗(yàn)格式化工具