如何对 cat 输出(包括黑白中的未知文件类型)进行着色?

如何对 cat 输出(包括黑白中的未知文件类型)进行着色?

我喜欢我的颜色vim。当我执行 a 时,我可以让输出具有类似的颜色cat吗?

我喜欢我可以使用着色工具,如下所示源文件和脚本文件的彩色“cat”?。我希望这是我的标准cat,例如我创建一个别名:

alias cat="source-highlight --out-format=esc -o STDOUT -i"

但是,如果文件类型未知,那么.gitignore这将返回:

$ cat .gitignore_global
source-highlight: could not find a language definition for input file .gitignore

如果它是可识别的文件类型,我怎样才能让命令执行一个版本,否则只执行文件的source-highlight cat标准黑白?cat

一种选择是使用别名,ccat但如果可能的话,我更希望将其替换为cat自身。

能够使用通配符也很好,例如cat *.rb(甚至是ccat *.rb)?目前给出:

$ ccat *.rb
Please, use one of the two syntaxes for invocation: 
source-highlight [OPTIONS]... -i input_file -o output_file
source-highlight [OPTIONS]... [FILES]...

如果能够做到这一点那就太好了:

ls *.rb | xargs ccat # (or cat)

我可以这样做:

ls *.rb | xargs cat

目前我得到:

$ ls *.rb | xargs ccat
xargs: ccat: No such file or directory

答案1

也许您可以执行类似以下脚本的操作(未经测试):

#!/bin/sh

for fn in "$@"; do
    source-highlight --out-format=esc -o STDOUT -i $fn 2>/dev/null || /bin/cat $fn
done

这做了一些事情:

  • 迭代每个命令行参数
  • 尝试运行source-highlight,将错误输出重定向到/dev/null
  • 如果source-highlight失败,则正常运行/bin/cat

您将此脚本放入一个名为cdcexample 的文件中,然后是alias cat=cdc.

作为一个函数

您可以将上述脚本改编为 Bash 函数调用,然后将其合并到您的点文件中,如下所示:

cdc() { 
  for fn in "$@"; do 
    source-highlight --out-format=esc -o STDOUT -i $fn 2>/dev/null || /bin/cat $fn;
  done 
}

编辑(迈克尔)出于某种原因尝试使用ccat函数名称不起作用,但cdc确实有效!

相关内容