我的~/.bashrc
中有很多别名,并且以为我需要编写一个函数来打印所有别名,以防万一我需要快速浏览可用别名。最初,我是用C#编写的,而且速度很快,但我不喜欢它具有外部依赖性,因此我将其重写为Shell脚本/ bash文件。这是函数:
# Print all aliases.
halp() {
FILENAME="$HOME/.bashrc"
# Colors
Red='\033[0;31m'
Black='\033[0;30m'
Green='\033[0;32m'
Brown='\033[0;33m'
Blue='\033[0;34m'
Purple='\033[0;35m'
Cyan='\033[0;36m'
LightGray='\033[0;37m'
DarkGray='\033[1;30m'
LightRed='\033[1;31m'
LightGreen='\033[1;32m'
Yellow='\033[1;33m'
LightBlue='\033[1;34m'
LightPurple='\033[1;35m'
LightCyan='\033[1;36m'
White='\033[1;37m'
NC='\033[0m' # No colour
while read -r LINE; do
if [[ "$LINE" == *"# Alias section end"* ]]; then
# Quit after alias sections
break
fi
if [[ "$LINE" == "#"* ]]; then
# Comments
echo -e "${DarkGray}$LINE"
elif [[ "$LINE" == "alias"* ]]; then
# Aliases - extract parts for colours. Eg:
# alias gs="git status"
# Where gs = alias
# git status = command
Command=$(echo $LINE | cut -d'=' -f 2)
Alias=$(echo $LINE | cut -d'=' -f 1 | cut -d' ' -f 2)
echo -e "${NC}alias ${Brown}$Alias${DarkGray}=${LightBlue}$Command"
else
# Uninteresting line
echo -e "${NC}$LINE"
fi
done < "$FILENAME"
}
我认为它很慢,因为我正在尝试为别名加上颜色标记,但并不确定。 C#可以非常快速地打印整个内容,没问题,但是shell脚本是如此之慢,我可以看到一行接一行地渲染,每行之间有相当大的间隔。
请问如何加快速度?或者我将如何重写它以便更快?
答案 0 :(得分:1)
zappa
可以处理输入拆分,而无需对read
进行两次调用,但是请记住,cut
固有地在逐行读取文件方面很慢,因为{ {1}}必须逐个字符读取输入内容,以确保其输入内容不会完全超过 一行。
替换
bash
使用
read