我的文件中有以下代码片段$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
在脚本中对其进行测试。但它没有给出预期的着色。
我究竟做错了什么?
谢谢。
解决方案:根据下面的评论和我发现的内容
我需要重命名函数和文件,
colorize-terminal
以用下划线替换连字符,例如:colorize_terminal
。 AFAICT,shell 脚本名称接受连字符,但函数则不然。他们接受下划线。我需要添加
colorize_terminal
为文件中的最后一行。获取函数文件后,我对其进行了测试
echo -e ${BOLD_YELLOW}"Hello there!"${RESET_COLOR}
,它按预期工作。如果我在登录时需要颜色,我可以在
$HOME/.bashrc
.
答案1
正如@Kusalananda 所建议的,这是我的解决方案。
- 作为在这里解释函数名只能由字母、数字和下划线组成。不允许使用连字符。因此,
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
。