Как я могу раскрасить вывод cat, включая неизвестные типы файлов в b & w?

Мне нравятся цвета, которые у меня есть в vim . Могу ли я получить свой результат, подобным образом окрашенный, когда я делаю cat ?

Мне нравится, что я могу использовать инструмент раскраски, как в Colorized `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 

Как я могу заставить команду сделать версию cat source-highlight если это признанный тип файла, а в противном случае просто сделать черно-белую cat файла?

Один из вариантов заключается в том, чтобы псевдоним был ccat но я предпочел бы, чтобы он заменил сам cat , если это возможно.

Было бы также cat *.rb использовать подстановочные знаки, например 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 

    Возможно, вы могли бы сделать что-то вроде следующего скрипта (непроверенный):

     #!/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 например, 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 сделал!