AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 559708
Accepted
Mahmoud Farouq
Mahmoud Farouq
Asked: 2020-01-01 07:32:09 +0800 CST2020-01-01 07:32:09 +0800 CST 2020-01-01 07:32:09 +0800 CST

如何在终端中画一条实线?

  • 772

我一直在寻找这个,但没有得到满意的答案。

我从 Gnu/Linuxtree命令的输出中截取了这张截图。

在此处输入图像描述

我想知道如何绘制或打印这样的线条,我尝试阅读树程序的源代码,但什么都不懂。

terminal unicode
  • 5 5 个回答
  • 4939 Views

5 个回答

  • Voted
  1. roaima
    2020-01-01T08:18:50+08:002020-01-01T08:18:50+08:00

    您可以使用 terminfo(5) ( man 5 terminfo) 中以“Line Graphics”开头的字符表来执行此操作

        Glyph                       ACS            Ascii     acsc     acsc
        Name                        Name           Default   Char     Value
        ────────────────────────────────────────────────────────────────────
        arrow pointing right        ACS_RARROW     >         +        0x2b
        arrow pointing left         ACS_LARROW     <         ,        0x2c
        arrow pointing up           ACS_UARROW     ^         -        0x2d
        arrow pointing down         ACS_DARROW     v         .        0x2e
        solid square block          ACS_BLOCK      #         0        0x30
        diamond                     ACS_DIAMOND    +         `        0x60
        checker board (stipple)     ACS_CKBOARD    :         a        0x61
        degree symbol               ACS_DEGREE     \         f        0x66
        plus/minus                  ACS_PLMINUS    #         g        0x67
        board of squares            ACS_BOARD      #         h        0x68
        lantern symbol              ACS_LANTERN    #         i        0x69
        lower right corner          ACS_LRCORNER   +         j        0x6a
        upper right corner          ACS_URCORNER   +         k        0x6b
        upper left corner           ACS_ULCORNER   +         l        0x6c
        lower left corner           ACS_LLCORNER   +         m        0x6d
        large plus or crossover     ACS_PLUS       +         n        0x6e
        scan line 1                 ACS_S1         ~         o        0x6f
        scan line 3                 ACS_S3         -         p        0x70
        horizontal line             ACS_HLINE      -         q        0x71
        scan line 7                 ACS_S7         -         r        0x72
        scan line 9                 ACS_S9         _         s        0x73
        tee pointing right          ACS_LTEE       +         t        0x74
        tee pointing left           ACS_RTEE       +         u        0x75
        tee pointing up             ACS_BTEE       +         v        0x76
        tee pointing down           ACS_TTEE       +         w        0x77
        vertical line               ACS_VLINE      |         x        0x78
        less-than-or-equal-to       ACS_LEQUAL     <         y        0x79
        greater-than-or-equal-to    ACS_GEQUAL     >         z        0x7a
        greek pi                    ACS_PI         *         {        0x7b
        not-equal                   ACS_NEQUAL     !         |        0x7c
        UK pound sign               ACS_STERLING   f         }        0x7d
        bullet                      ACS_BULLET     o         ~        0x7e
    

    举个例子

    tput smacs
    printf "%s\n%s\n" 'lqqqqqk' 'mqqqqqj'
    tput rmacs
    

    输出

    ┌────┐
    └────┘
    

    观察

    我注意到在我的系统上,并非所有列出的字符实际上都像描述的那样映射。例如

    echo '+ , - . 0 ` a f g h i j k l m n o p q r s t u v w y x z { | } ~'
    tput smacs
    echo '+ , - . 0 ` a f g h i j k l m n o p q r s t u v w y x z { | } ~'
    tput rmacs
    
    + , - . 0 ` a f g h i j k l m n o p q r s t u v w y x z { | } ~
    + , - . 0 ♦ # ° ± n ↓ ┘ ┐ ┌ └ ┼ ⎺ ⎻ ─ ⎼ ⎽ ├ ┤ ┴ ┬ ≤ │ ≥ # ≠ £ ·
    
    • 6
  2. Best Answer
    Jason K Lai
    2020-01-01T08:14:09+08:002020-01-01T08:14:09+08:00

    正如另一位用户所评论的那样,它需要特殊的绘图字符。在终端中,可以通过printf命令调用它们。例如,要重新创建tree问题中示例的前两行,它看起来像:

    printf "\x1b(0\x74\x1b(B\x1b(0\x71\x1b(B\x1b(0\x71\x1b(B info\n"
    printf "\x1b(0\x78\x1b(B   \x1b(0\x6d\x1b(B\x1b(0\x71\x1b(B\x1b(0\x71\x1b(B exclude\n"
    

    有关画框字符的列表,请参阅维基百科页面。

    • 4
  3. ctrl-alt-delor
    2020-01-01T09:25:59+08:002020-01-01T09:25:59+08:00

    它只使用 uni-code 字符:Unicode 大约是 2^24 个字符。它包括 ASCII 作为其前 128 个字符,然后包括来自所有语言(包括数学)的字符,包括一些虚构的字符、绘图字符、表情符号等等。

    您可以在 uni-code 绘图字符中查找字符(例如https://en.wikipedia.org/wiki/Box-drawing_character#Unicode),或者只是复制示例中的字符。

    这里有相同的字符。它们在此站点上的渲染效果不佳(可能是字体)。但是,它是相同的文本。如果你粘贴回终端,它看起来会一样。

    ├── media
    │   ├── cdrom
    │   ├── other
    

    其他答案提供了另一种方法。我不知道每个的优点和缺点。很高兴听到他们的声音。

    • 3
  4. Paul_Pedant
    2020-01-01T08:22:17+08:002020-01-01T08:22:17+08:00

    我没有tree安装,但我从cfdisk. 我将 cfdisk 的输出粘贴到 od(八进制转储)中。这些符号只是来自我的语言环境的多字节,即LANG=en_GB.UTF-8.

    这是一个垂直条,右侧有一个分支,后面是一条水平实线:342 224 234 342 224 200

    这是一个右下角,后跟相同的水平:342 224 224 342 224 200

    转到此网址:

    www.ltg.ed.ac.uk/~richard/utf-8.cgi
    

    并输入八进​​制 342 224 224

    或者在这里:

    www.obliquity.com/computer/html/unicode2500.html
    

    您需要谷歌“将 Unicode 代码点转换为 UTF-8”。

    也试试:echo -e '\0342\0224\0234\0342\0224\0200'

    • 1
  5. jerch
    2020-01-02T12:41:11+08:002020-01-02T12:41:11+08:00

    尽管其他答案已经将您指向方框绘图字符,但您应该小心在您的应用程序中自行使用硬编码的终端序列,如这些答案中给出的那样。请注意,可能有些终端根本不理解这些序列,而是会输出一些垃圾。

    如果您对此一无所知,请限制使用这些序列或使用库,这能够以统一的方式处理终端尴尬,例如ncurses. 这些库还有一个用于绘制水平线的原语(带有适当的后备)。

    如果您仍然热衷于自己完成这项工作并且没有终端数据库的帮助libterminfo,您有以下可能性:

    • 查找您要寻址的终端是否支持所有要发送的序列+字符(如果不支持,请找到一些替换),对您要支持的每个终端重复此操作
    • 如果您的目标终端支持 Unicode (UTF-8),您可能会直接插入相应的 Unicode 字符(测试发送 U+2500 是否正确显示)
    • 0

相关问题

  • 寻找终端下载管理器

  • 语法错误:fd 编号错误?

  • traceroute,只打印网关信息

  • 如何在 ssh 上运行一瞥?

  • 备份 Nand Flash 存储区

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve