将 $HOME/.bashrc 中的代码转化为函数

将 $HOME/.bashrc 中的代码转化为函数

我的文件中有以下代码片段$HOME/.bashrc

export RED='\e[0;31m'
export GREEN='\e[0;32m'
export YELLOW='\e[0;33m'
export BLUE='\e[0;34m'
export MAGENTA='\e[0;35m'
export CYAN='\e[0;36m'
export WHITE='\e[0;37m'
#
export BOLD_RED='\e[1;31m'
export BOLD_GREEN='\e[1;32m'
export BOLD_YELLOW='\e[1;33m'
export BOLD_BLUE='\e[1;34m'
export BOLD_MAGENTA='\e[1;35m'
export BOLD_CYAN='\e[1;36m'
export BOLD_WHITE='\e[1;37m'
#
export BLACK='\e[\030'
export RESET_COLOR='\e[m'
export RESET_TERMINAL_COLOR="tput sgr0"

我想将其模块化为可从所有脚本调用的函数。

我已从文件中删除了代码$HOME/.bashrc,并在可执行路径中创建了一个名为“colorize-terminal包含”的文件

#!/bin/bash
function colorize-terminal {
[The code above goes in here]
}

并尝试source colorize-terminal在脚本中对其进行测试。但它没有给出预期的着色。

我究竟做错了什么?

谢谢。

解决方案:根据下面的评论和我发现的内容

  1. 我需要重命名函数和文件,colorize-terminal以用下划线替换连字符,例如:colorize_terminal。 AFAICT,shell 脚本名称接受连字符,但函数则不然。他们接受下划线。

  2. 我需要添加colorize_terminal为文件中的最后一行。

  3. 获取函数文件后,我对其进行了测试echo -e ${BOLD_YELLOW}"Hello there!"${RESET_COLOR},它按预期工作。

  4. 如果我在登录时需要颜色,我可以在$HOME/.bashrc.

答案1

正如@Kusalananda 所建议的,这是我的解决方案。

  1. 作为在这里解释函数名只能由字母、数字和下划线组成。不允许使用连字符。因此,colorize-terminal需要将文件和函数重命名为colorize_terminal.

具体bash工作代码为:

#!/bin/bash
function colorize_terminal {
export RED='\e[0;31m'
export GREEN='\e[0;32m'
export YELLOW='\e[0;33m'
export BLUE='\e[0;34m'
export MAGENTA='\e[0;35m'
export CYAN='\e[0;36m'
export WHITE='\e[0;37m'
#
export BOLD_RED='\e[1;31m'
export BOLD_GREEN='\e[1;32m'
export BOLD_YELLOW='\e[1;33m'
export BOLD_BLUE='\e[1;34m'
export BOLD_MAGENTA='\e[1;35m'
export BOLD_CYAN='\e[1;36m'
export BOLD_WHITE='\e[1;37m'
#
export BLACK='\e[\030'
export BOLD='\e[\033'
export RESET_COLOR='\e[m'
export RESET_TERMINAL_COLOR="tput sgr0"
}

将该代码放入名为colorize_terminal.通过指定文件路径从任何脚本中调用它:

source /path-to-colorize-terminal/colorize_terminal

它的定义将可供脚本使用。

可以使用简单的一行命令来测试它,例如:

echo -e "${BOLD_YELLOW}""Hello World!""${RESET_COLOR}"

理想情况下,可以通过包含类似这样的行在启动时拥有此功能

source "$HOME/bin/colorize_terminal"

在文件中"$HOME/.bashrc

相关内容