【问题标题】:How to make bash color code stored in variable available to external script如何使存储在变量中的bash颜色代码可用于外部脚本
【发布时间】:2016-08-05 18:21:50
【问题描述】:

我似乎无法找到解决这个特殊问题的方法,因为我使用 bash 颜色代码作为变量存储在外部文件中:

  1. 我有一个文件,其中包含存储为变量的颜色代码集合,我希望将这些颜色代码提供给其他脚本,以便我可以在所有脚本中使用变量名称而不是颜色代码。

colorCodeFile.sh

green='\033[1;32m'
red='\033[31m'
yellow='\033[1;33m'
endColor='\033[0m'
  1. 我在所有其他脚本文件的开头使用 source 来使颜色变量可用。这工作正常,我得到彩色输出。

aScriptUsingColorCodes.sh

source ~/colorCodeFile.sh
echo "this is ${red}red${endColor}"
  1. 问题在于,出于某种原因,“调用”源的外部脚本 (aScriptUsingColorCodes.sh) 在我的 .bashrc 文件中必须有一个别名。如果我使脚本可执行并将其放在我的路径中并删除别名,则颜色变量将不再可用。

如果我在我的 .bashrc 文件中使用别名来运行脚本,我不明白为什么颜色变量可用,但如果我使脚本可执行并且只从命令行运行它而不使用别名,则颜色变量不可用。

为了清楚起见,可执行脚本在我的路径中并且它们确实运行。 colorCodeFile.sh 文件包含带有字符串和函数的变量,当我使用 source 从外部脚本调用它们时,它们都可用并且工作正常。但是对于颜色代码变量,我最终会得到颜色代码文本 ('\033[31m') 而不是彩色输出。

如果这很重要,我正在使用 MAC。

【问题讨论】:

    标签: bash macos shell colors


    【解决方案1】:

    像这样更新colorCodeFile.sh

    $ cat colorCodeFile.sh
    green=$(echo -e '\033[1;32m')
    red=$(echo -e '\033[31m')
    yellow=$(echo -e '\033[1;33m')
    endColor=$(echo -e '\033[0m')
    

    或者将aScriptUsingColorCodes.sh更新为:

    echo -e "this is ${red}red${endColor}"
    

    【讨论】:

    • 这很好用,谢谢!虽然我仍然很好奇为什么我需要 echo -e 如果调用包含颜色变量的源的脚本正在作为可执行文件运行,但是如果使用我的 .bashrc 文件中的别名运行脚本,为什么不需要 echo -e .只是出于好奇。
    • @jmrq 我已经更新了答案。您必须要求echo 将字符串用作ANSI color code,而不是将其解释为string
    猜你喜欢
    • 2011-12-10
    • 2021-11-15
    • 1970-01-01
    • 2021-07-04
    • 2015-08-06
    • 2014-10-01
    • 2016-07-10
    • 2021-10-11
    • 2011-03-09
    相关资源
    最近更新 更多