在翻看Monica Powell的博客中发现了了比较有意思的东西。决定在我的iterm2也加上它。
确保 oh-my-zsh
已经安装在你的系统上。如果你还没有安装 oh-my-zsh
,你可以通过以下命令安装:
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)"
如果你已经安装,你可以切换 oh-my-zsh
(omz) 和 Bash
从 oh-my-zsh 切换到 Bash
chsh -s /bin/bash
这将修改默认shell
为 bash
。
或者运行以下命令来立即切换到 bash
:
bash
从 Bash 切换到 oh-my-zsh
chsh -s /bin/zsh
请注意,/bin/zsh
可能根据你的系统安装位置有所不同。
或者运行以下命令来立即切换到 zsh
:
zsh
在切换 shell 之前,请确保你了解这些操作,因为它们会改变你的终端行为和配置。每次切换后,你可能需要重新配置环境变量或别名,因为它们通常在 .bashrc
或 .zshrc
文件中设置。
设置静态 ASCII 字符图案
让我们的iterm2
终端 每次启动或者新开一个窗口,它就会输出下面的字符图案;
它是这样的
_ _ _ _ __ __ _ _ _
| | | | ___| | | ___ \ \ / /__ _ __| | __| | |
| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | |
| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_|
|_| |_|\___|_|_|\___/ \_/\_/ \___/|_| |_|\__,_(_)
或是这样的
/^--^\ /^--^\ /^--^\
\____/ \____/ \____/
/ \ / \ / \
KAT | | | | | |
\__ __/ \__ __/ \__ __/
|^|^|^|^|^|^|^|^|^|^|^|^\ \^|^|^|^/ /^|^|^|^|^\ \^|^|^|^|^|^|^|^|^|^|^|^|
| | | | | | | | | | | | |\ \| | |/ /| | | | | | \ \ | | | | | | | | | | |
########################/ /######\ \###########/ /#######################
| | | | | | | | | | | | \/| | | | \/| | | | | |\/ | | | | | | | | | | | |
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|
通过浏览ASCII Art Archive或Text to ASCII Art Generator (TAAG)寻找你喜欢的字符图案,也可以自己自定义个性的字符图案。
[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
程序员就喜欢在控制台或终端里加些有趣的东西,这应该算是计算机抽象艺术吧。
在你的~/.zshrc
文件或ZSH 主题文件中
打开,将每一行单独复制,并加上echo
命令。
如果你已经安装了oh-my-zsh
(omz)环境,以下是主题文件可能所在的路径:
~/.oh-my-zsh/themes/
如果你已经使用了zsh
,你可以在~/.zshrc
文件中看到类似以下内容:
ZSH_THEME="robbyrussell"
这里的"robbyrussell"
是默认主题的名称。这个名称对应于~/.oh-my-zsh/themes/robbyrussell.zsh-theme
文件。
# ~/.zshrc OR your zsh theme file
echo " ___"
echo "|[_]|"
echo "|+ ;| "
echo "\`---'"
[!TIP]
需要对无法打印的字符使用反斜杠\
进行转义,否则无法在iterm2
上正确打印。
如果你想创建自己的主题,你可以创建一个新的.zsh-theme
文件在~/.oh-my-zsh/themes/
目录下,然后修改.zshrc
文件中的ZSH_THEME
变量来使用你的新主题。
确保在修改配置文件后,运行以下命令来使更改生效:
source ~/.zshrc
[站外图片上传中...(image-f19b0d-1731902012902)]
复制的内容太多怎么办?
不知道哪些字符需要转义怎么办?
那么,
可以使用 在线 JSON 校验格式化工具,里面有转义
选项,可以一键转义,要一行行的复制转义,记得符合JSON
格式哦。
结合变量使用
除了打印静态信息外,还可以根据变量(例如时间)的值显示不同的信息。要确定当前小时,可以使用以下命令:
date +"%H"
18 # output at 6PM
根据当前小时返回不同的greeting
值,通过检查当前小时是否-ge
(大于或等于)或-le
(小于或等于)定义的特定时间范围。
# 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 一个欢迎提示,如下图所示:
[站外图片上传中...(image-9b7514-1731902012902)]
根据一天中的时间,显示的输出是下列消息之一:
- ✦ Good morning, Monica! ✦
- ✦ Good afternoon, Monica! ✦
- ✦ Good evening, Monica! ✦
可以在 GitHub 上的点文件中查看Monica
的源码。
设置为电脑名称
只显示静态的名字就很普通,下面我们通过变量来获取当前电脑的账户名称
# 使用 scutil 命令获取电脑名称
# COMPUTER_NAME=$(scutil --get ComputerName)
# 使用 hostname 命令获取主机名
# COMPUTER_NAME=$(hostname)
# 使用 $USER 环境变量:
username="$USER"
设置 ASCII 字符颜色
设置 ANSI 颜色
那么zsh
环境下的iterm2
可以打印有颜色的文字
那么我们自己的打印,可以让打印更好看一点,可以使用 ANSI
转义序列来为控制台输出添加颜色。
在 ANSI
转义序列中,颜色类型通常指的是文本颜色、背景颜色、亮度(例如粗体或非粗体)等。我之前提供的颜色代码是基于文本颜色和背景颜色的 ANSI 转义序列。下面是详细的颜色类型:
- 文本颜色(Foreground colors):
- 30-37: 标准 ANSI 文本颜色(例如,30 是黑色,31 是红色,32 是绿色,依此类推到 37 是白色)
- 90-97: 高亮文本颜色(例如,90 是亮黑色,91 是亮红色,92 是亮绿色,依此类推到 97 是亮白色)
- 背景颜色(Background colors):
- 40-47: 标准 ANSI 背景颜色(例如,40 是黑色背景,41 是红色背景,42 是绿色背景,依此类推到 47 是白色背景)
- 100-107: 高亮背景颜色(例如,100 是亮黑色背景,101 是亮红色背景,102 是亮绿色背景,依此类推到 107 是亮白色背景)
- 亮度(Brightness):
- 0: 重置所有属性(包括颜色)
- 1: 设置粗体
- 2: 设置低亮度(不是所有终端都支持)
- 22: 取消粗体(设置正常亮度)
例如,\033[31m
表示红色文本,\033[32m
表示绿色文本,而\033[41m
表示红色背景。
如果你想要了解具体的颜色代码代表什么颜色,你可以根据上述列表来判断。例如,如果你看到\033[33m
,那么这是一个标准的 ANSI 文本颜色代码,表示黄色文本。如果你看到\033[43m
,那么这是一个标准的 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}"
请确保在 echo
命令中使用 -e
选项,以启用对转义序列的解释。
这些代码可以在你的 Zsh 脚本或直接在终端中使用。当你完成彩色文本的输出后,使用 reset
变量来重置颜色,以确保后续的输出不会受到影响。
注意,并非所有的终端都支持所有的颜色代码,但这些基本的颜色在大多数现代终端中都是可用的。
更改我们的内容:
echo " ___"
echo "|[_]|"
echo -e "|+ ;| ${magenta}✦ $greeting,$username! ✦${reset}"
echo "\`---'"
设置 24bit 真彩色
但是感觉还是差点意思,怎么才能像omz
更新那样呢?
于是,我们翻看了omz
在我们本地~/.oh-my-zsh/tools/
路径下的upgrade.sh和upgrade.sh文件。
我们找到了定义有关颜色的源码:
# 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
}
下面是用于检查当前环境是否支持真彩色(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
当调用
supports_truecolor
函数时,它会检查当前终端是否支持真彩色。如果支持,函数返回0
;
如果不支持,函数返回1
(在Shell
脚本中,返回1
通常表示失败或假)。
下面是我结合omz
源码,设置的自定义的ASCII
字符图案:
# 自定义静态字符图案
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
制表符
如果你需要再字符图案周边加上边框,你可以使用搜狗输入法-符号表情-制表符
找到你想要的表格符号。
┏┳┓╔╦╗╓╥╖
┣╋┫╠╬╣╟╫╢
┗┻┛╚╩╝╙╨╜
┌┬┐╭╮╱╲┃║
├┼┤╰╯╲╱┆┇
└┴┘━═┅┈╳
参考资料
Monica's Digital Playground
Custom ZSH Startup Message
ASCII Art Archive
ASCII Art Game consoles - asciiart.eu
Text to ASCII Art Generator (TAAG)
在线 JSON 校验格式化工具