• 请不要在回答技术问题时复制粘贴 AI 生成的内容
AaronWxt
V2EX  ›  程序员

比 cat 更好用的命令了解一下?

  •  
  •   AaronWxt · Jun 4, 2018 · 9012 views
    This topic created in 3076 days ago, the information mentioned may be changed or developed.

    作为程序员经常使用命令行来进行一些文件的处理,比如常见的:git, vim ,以及不同语言下的一些命令等。那么这么多的命令中,相信你肯定有用过cat命令用来查看文件的内容,但是这个命令仅仅只能将文本展示出来,并不会很好的辅助我们阅读和理解里面的内容,尤其是文件中内容为 代码时,看起来就特别的痛苦了。那么这篇文章就要介绍更好命令来替代 cat命令,它就是bat命令。(不是 windows 中的那个脚本哟)

    bat 介绍

    bat 是一个语法高亮显示和Git集成的cat高级版本,也就是说,bat 有 cat的所有功能,且已经集成了代码高亮,和git版本管理的工具,并且会对过长的文件进行自动分页,不会像 cat 一样全部一次打印,先来看张效果图:

    bat 安装

    安装的方法也是超级的简单,具体安装如下:

    • Linux 上
    git clone https://aur.archlinux.org/bat.git
    cd bat
    makepkg -si
    
    • MACOS 上
    brew install bat
    

    安装完成后,输入bat -help 看下是否会出现相关的提示信息,来确认是否安装成功。

    bat 使用

    使用与 cat 类似,在 bat 后面紧跟文件 就行了, 也可以同时打开过个,但结果是以一个接一个展示出来。

    如打开一个有 git 管理的文件,会展示出文件中添加与删除的部分,如下图所示:

    如果需要制定文件中高亮的语言,可以使用 -l 参数来制定语言,例如: bat ./test.json -l json 则指定文件中高亮为 json 模式,当然不指定也没有问题,默认会自动识别。 总之使用还是比较简单,一点都不复杂。

    总结

    如果有了这个命令,我想一般都不会再用 cat命令了,但每次敲命令都习惯使用 cat 了, 那么建议将 cat 命令使用 alias cat= 'bat' 将其指定为 bat 这样就可以使用cat 命令,而达到 bat 的使用效果。

    希望大家能够喜欢这篇文章,喜欢就分享出去吧。 如果你有更好的命令,欢迎留言交流。

    欢迎大家关注我的公众号: 技术特工队

    46 replies  •  2018-12-05 18:51:40 +08:00
    lonccc
    lonccc
    Jun 4, 2018 via Android
    1
    待会试试
    fan123199
    fan123199
    Jun 4, 2018
    2
    ubuntu 怎么装? 显示 makepkg not found.
    widewing
    widewing
    Jun 4, 2018 via Android❤️3
    3
    那干嘛不用 vim 呢。。cat 主要是管道中用吧
    xiaket
    xiaket
    Jun 4, 2018
    4
    之前看过,不过这样打印出来的内容不方便复制,所以仍然用 pygmentize 来彩色输出代码.
    jasonyang9
    jasonyang9
    Jun 4, 2018❤️1
    5
    这玩意符合 Linux 哲学么?
    LeungV2
    LeungV2
    Jun 4, 2018
    6
    经常用 cat 弱弱的问一句 我直接在我命令行
    git clone https://aur.archlinux.org/bat.git 也行嘛。。
    twor2
    twor2
    Jun 4, 2018 via iPhone
    7
    ccat 了解一下
    yanaraika
    yanaraika
    Jun 4, 2018 via Android❤️1
    8
    cat | pygmentize 了解一下
    muziki
    muziki
    Jun 4, 2018
    9
    已经用了很长一段时间了,比 cat 好太多
    0x338
    0x338
    Jun 4, 2018 via Android
    10
    @fan123199 那是 Arch Linux 的安装方式
    prolic
    prolic
    Jun 4, 2018 via Android
    11
    没有 dog 么?
    agagega
    agagega
    Jun 4, 2018
    12
    @jasonyang9 ripgrep 乃至 git 也不符合吧?时代变了...
    ReinWD
    ReinWD
    Jun 4, 2018
    13
    第一反应是一个没有窗口的终端 sublime like 阅读工具
    在管道,脚本里应该不如 cat 好用
    日常使用替换 cat 讲道理是没问题的
    muziki
    muziki
    Jun 4, 2018
    14
    @yanaraika 还是不够看
    fan123199
    fan123199
    Jun 4, 2018❤️1
    15
    https://github.com/sharkdp/bat 替 lz 补一个原 repo 的链接,有不同发行版的安装方式。
    huskar
    huskar
    Jun 4, 2018❤️1
    16
    alias cat= 'bat'???这个工具和 cat 干的完全不是一件事吧,肉眼可读性本来就不是 cat 的目标。
    jason2017
    jason2017
    Jun 4, 2018❤️1
    17
    现在这些奇奇怪怪的命令,真的就是业余的时候玩玩,或者新学 linux 的会尝试用用。
    基本上正常公司企业级开发的,都不会搞这东西,一是不稳定,二是不能保证安全性,三是更变习惯很成本很大。
    LeungV2
    LeungV2
    Jun 4, 2018
    18
    @fan123199 makepkg not found. 解决了?
    UnknownR
    UnknownR
    Jun 4, 2018
    19
    dog 了解一下
    love4taylor
    love4taylor
    Jun 4, 2018
    20
    @fan123199 #2 https://github.com/sharkdp/bat... 贴主是把 Linux = Arch 了..
    fan123199
    fan123199
    Jun 4, 2018
    21
    @LeungV2 在 github 里,找到用 binary 的方式安装,我是 ubuntu,用的 deb
    xwhxbg
    xwhxbg
    Jun 4, 2018❤️2
    22
    这货替代 less 可以,替代不了 cat
    wklken
    wklken
    Jun 4, 2018❤️1
    23
    ccat +1

    alias cat=ccat 使用一年多了
    SingeeKing
    SingeeKing
    Jun 4, 2018
    24
    单纯代码高亮可以使用 ccat,不过加上了分页那么还不错


    @xwhxbg #22 请问为什么无法替代 cat ?
    iyaozhen
    iyaozhen
    Jun 4, 2018 via Android
    25
    感觉平常也不用 cat 看文件呀,看日志用 less,看代码用 vim
    akillcool
    akillcool
    Jun 4, 2018 via Android
    26
    cat head tail 一起用,而且 cat 直接按行传文本文件到管道很方便,如果看文本的话,更倾向于直接 vim
    dahvlh
    dahvlh
    Jun 4, 2018
    27
    ubuntu 上 缺少 makepkg
    AaronWxt
    AaronWxt
    OP
    Jun 4, 2018
    28
    @LeungV2 这个只是把项目源码拉下来。
    congeec
    congeec
    Jun 4, 2018 via iPhone
    29
    我用 highlight 做语法高亮
    平时 cat 就那么几个用法
    cat -e or cat -a to display non-printable characters
    cat file > new-file to copy a file with file attributes set by default mask
    cat << EOF
    没用 bat 的需求呐
    sakura111
    sakura111
    Jun 4, 2018❤️1
    30
    说吧,bat 三家公司给了你多少钱?我今日头条出三倍!
    ACSuperChen
    ACSuperChen
    Jun 4, 2018
    31
    我一般用 cat 复制东西。。。
    楼主这个东西是好,只是复制还是有行号,很麻烦。。。
    xwhxbg
    xwhxbg
    Jun 4, 2018
    32
    @SingeeKing 比如我用 cat 拼接文件,但是并不需要行号和高亮
    nekoyaki
    nekoyaki
    Jun 4, 2018
    33
    cat 的命令本来就不是给你输出人类可读的文本的……很多程序要用 cat 来把某些文件给管道到其他输出里去,这些文件甚至有可能是二进制文件。
    如果把系统里的 cat 给替代了,到时候死都不知道怎么死的……
    乖乖用 less 和 vim 不好吗。
    kiwi95
    kiwi95
    Jun 4, 2018 via Android
    34
    这是楼主自己写的工具吗,如果不是,一个冷门命令行工具写下用法就贴一个自己公众号的推广,这算什么?
    hiahia
    hiahia
    Jun 4, 2018
    35
    看标题还以为要讲 ccat 呢
    muziki
    muziki
    Jun 4, 2018 via iPhone
    36
    楼上一堆连 readme 都读不懂的说管道,文件拼接
    tuding
    tuding
    Jun 4, 2018
    37
    麻烦问下, ccat demo.txt 提示 "Enter decryption key: "是什么意思
    @hiahia
    @twor2
    dorentus
    dorentus
    Jun 4, 2018 via iPhone
    38
    还以为要讲 lolcat 呢
    jorneyr
    jorneyr
    Jun 4, 2018
    39
    挺好的,用上了
    EPr2hh6LADQWqRVH
    EPr2hh6LADQWqRVH
    Jun 4, 2018
    40
    cat -- ConcATenate and print files
    gongzili456
    gongzili456
    Jun 4, 2018
    41
    ccat 了解一下
    param
    param
    Jun 5, 2018 via Android
    42
    @twor2 之前一直用 ccat,后来发现了 bat 就一直用 bat。还有一个毛病是,跟另一个名为 bat 的项目名冲突了。。

    https://github.com/astaxie/bat

    直接在 aur 安装会冲突,只好让其中一个手动下载 binary 并设 alias
    Kobayashi
    Kobayashi
    Dec 5, 2018
    43
    bat. A cat(1) clone with wings.

    上面这句话本身就是个笑话,cat 定位是做文本拼接,例如把文件 1 的内容拼接到文件 2 后面。当只给定一个文件名作为参数时,把文件内容拼接到标准输出。cat 从来没说自己是要做文本查看、语法高亮。

    而这个 bat,没有拼接功能也号称是 cat 的 clone。其实这没啥关系,bat 语法高亮显示、行号显示是做的不错。但是这个定位太 TM 尴尬,语法高亮是属于文本编辑器的工作,vim、nano、emacs、subl、vscode 哪个不行?而且 vim、nano 查看文本还不会污染终端的输出,你这 bat 把所有内容全都扔在终端给人看。

    用 cat 来查看文本内容的人我真不明白你们是怎么想的,放着文本编辑器不用,非要找作文本拼接的来做文本查看。还有那个用 pygmentize 的兄弟,你也是绝了。

    `cat | pygmentize`, cat 做输入,这也是 cat 标准的错误用法。内容输入,请用重定向:`pygmentize < README.md`.

    给 vim、nano 配置一个语法高亮,有那么难么?有那么难么? https://github.com/scopatz/nanorc
    Kobayashi
    Kobayashi
    Dec 5, 2018
    44
    @jasonyang9 不符合。bat. A cat(1) clone with wings. 这句话本身就是笑话。
    @SingeeKing 因为 cat 根本不是做文本查看的。cat, concatenate. 用来做文本拼接。cat 做文本查看,这是 cat 常见错误用法之一。
    @yanaraika `pygmentize < filename` 了解一下。cat 做文本输入,这也是 cat 常见的错误用法之一。内容输入请用重定向。

    @nekoyaki 又见一位,文本输入不要用 cat 加管道,用重定向 `<`。这样简化了过程,没必要经过 cat,浪费时间。
    nekoyaki
    nekoyaki
    Dec 5, 2018
    45
    @Kobayashi
    “文本输入不要用 cat 加管道,用重定向 `<`。这样简化了过程,没必要经过 cat,浪费时间。”
    ======
    理想很好,你看看现实世界的普通程序员理不理你……
    nekoyaki
    nekoyaki
    Dec 5, 2018
    46
    @Kobayashi
    ……八百年钱的帖子,没注意你不是楼主,不好意思。
    我想说的是,贸然替换系统最常用的命令,很容易产生问题。你说不要用 cat 加管道,我知道这个道理,可其他写脚本的人未必遵守。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5200 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 110ms · UTC 06:24 · PVG 14:24 · LAX 22:24 · JFK 01:24
    ♥ Do have faith in what you're doing.