我喜欢我的颜色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
您将此脚本放入一个名为cdc
example 的文件中,然后是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
确实有效!