为什么我从文件中打印的代码这么慢?

时间:2019-02-14 13:01:18

标签: bash shell

我的~/.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脚本是如此之慢,我可以看到一行接一行地渲染,每行之间有相当大的间隔。

请问如何加快速度?或者我将如何重写它以便更快?

现在正在打印的示例: enter image description here

1 个答案:

答案 0 :(得分:1)

zappa可以处理输入拆分,而无需对read进行两次调用,但是请记住,cut固有地在逐行读取文件方面很慢,因为{ {1}}必须逐个字符读取输入内容,以确保其输入内容不会完全超过 一行。

替换

bash

使用

read