使用 catimg 并排显示两个内容(就像在 neofetch 中一样)

2024-03-17

我正在尝试使用 bash 创建类似 neofetch 的东西。

我想在右侧显示一张图像和一张 ASCII 艺术图(使用 cat

当我对某些机器进行 ssh 时,我想将其用作登录欢迎屏幕。

所以我能够通过以下方式展示 ascii 艺术:

cat << EOF

 _____         _   
|_   _|       | |  
  | | ___  ___| |_ 
  | |/ _ \/ __| __|
  | |  __/\__ \ |_ 
  \_/\___||___/\__|
                   
                   

EOF

并使用显示我的图像catimg myimage.png

不过,我尝试将它们并排展示。我尝试使用 pr。pr -m -t <(catimg) <(cat mytestfile.txt)但它不起作用并且它削减了我的 ascii 艺术。

使用粘贴命令也是一样的。

有谁能做到吗。如果是的话怎么办? 我的 ascii 艺术作品也很长,所以如果不被剪切的话,那就太棒了。

感谢您的帮助。


生成txt文件通过merging的输出catimg and figlet

而不是真实的merge,我将简单地将两个输出放在正确的位置ANSI 转义码 https://en.wikipedia.org/wiki/ANSI_escape_code

{
    mapfile aa < <(figlet -w40 $text)
    printf "%s" "${aa[@]}"
    catimg -w40 "$image" |
        sed "\$!s/^/\o33[40C/;1s/^/\o33[${#aa[@]}A/"
} >outputfile.txt

这可以写成一个函数:

mkTextImage() {
    local aa width=${COLUMNS} prcent=50 text image lwidth rwidth ffont
    while [ "${1::1}" == "-" ] ;do
        case $1 in 
            -w) shift;width=$1;shift;;
            -p) shift;prcent=$1;shift;;
            -f) shift;ffont="-f $1";shift;;
        esac
    done
    text="$1" image="$2"
    printf -v lwidth %.0f $(
         bc -l <<<"$width/100*$prcent")
    rwidth=$((width-lwidth))
    mapfile aa < <(figlet -w$lwidth $ffont $text)
    printf "%s" "${aa[@]}"
    catimg -w$rwidth "$image" |
        sed "\$!s/^/\o33[${lwidth}C/;1s/^/\o33[${#aa[@]}A/"
}

并反转:

(注:这项工作同时catimg长度保持大于figlet length)

mkImageText () { 
    local aa fl width=${COLUMNS} prcent=50 text image lwidth rwidth ffont
    while [ "${1::1}" == "-" ] ;do
        case $1 in 
            -w) shift;width=$1;shift;;
            -p) shift;prcent=$1;shift;;
            -f) shift;ffont="-f $1";shift;;
        esac
    done
    image="$1" text="$2"
    printf -v lwidth %.0f $(bc -l <<<"$width/100*$prcent")
    rwidth=$((width-lwidth))
    mapfile aa < <(catimg -w$lwidth "$image")
    printf "%s" "${aa[@]}"
    printf "\e[$((${#aa[@]}-1))A"
    mapfile fl < <(figlet -w$rwidth $ffont "$text")
    printf "\e[${lwidth}C%s" "${fl[@]}"
    printf "\e[$((${#aa[@]}-${#fl[@]}-1))B"
}

从那里,关于您的评论:尝试使用42% of 80列宽对于图像:

mkImageText -f small -p 42 spongebob.png "Sponge Bob"

or

mkTextImage -f small -p 58 "Sponge Bob" spongebob.png 

将渲染:

然后你可以尝试使用-f smblock选项,或修改要使用的函数toilet代替figlet...

更完整的版本在我的网站上:mkImageText.sh https://f-hauri.ch/vrac/mkImageText.sh.txt

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 catimg 并排显示两个内容(就像在 neofetch 中一样) 的相关文章

  • 从 Amazon S3 存储桶下载文件的脚本

    尝试编写脚本以从 Amazon S3 存储桶下载文件 cURL 网站上的示例遇到问题 下面的脚本产生 我们计算的请求签名与您的签名不匹配 假如 检查您的密钥和签名方法 感谢任何帮助 bin sh file filename php buck
  • 如何在递归调用函数时阻止 bash 创建子 shell

    这是一个计算阶乘的简单 shell 函数 bin bash function factorial if 1 lt 2 then echo 1 else echo 1 factorial 1 1 fi factorial 1 但我发现这个脚本
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • 使用 grep 查找包含所有搜索字符串的行

    我有一个文件 其中包含很多与此类似的行 id 2796 some model Profile message type MODEL SAVE fields account 14 address null modification times
  • 从 bash 从新的 Google Chrome 浏览器会话获取“用户代理”字符串

    我想要得到用户代理 HTTP 请求标头 https developer mozilla org en US docs Web HTTP Headers User Agent来自 bash 的新 Google Chrome 浏览器会话 刚刚打
  • bash 中 :-(冒号破折号)的用法

    bash中这种风格的含义是什么 PUBLIC INTERFACE eth0 目的是什么 If PUBLIC INTERFACE存在且不为null 则返回其值 否则返回 eth0 实际上有一些记录在bash 手册页 http linux di
  • 如何制作一个 bash 脚本来同时创建 40 个程序实例?

    我是新来的bash and Linux 我编写了一个程序 我想创建多个同时实例 现在 我通过打开 10 个新终端 然后运行该程序 10 次 我运行的命令是php home calculatedata php 使用 bash 脚本执行此操作的
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • 我可以从命令行打印 html 文件(带有图像、css)吗?

    我想从脚本中打印带有图像的样式化 html 页面 谁能建议一个开源解决方案 我使用的是 Linux Ubuntu 8 04 但也对其他操作系统的解决方案感兴趣 你可以给html2ps http user it uu se jan html2
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • 有没有办法让我简化这些回声? [复制]

    这个问题在这里已经有答案了 我仍在学习如何编写 shell 脚本 并且我面临着一个挑战 让我更容易回显 Name1 Name2 Name15 我不太确定从哪里开始 我已经想法 但如果我搞砸了 我不想看起来很傻 有什么帮助吗 我实际上还没有尝
  • 如何查找所有以句号结尾的单词?

    我有一个包含许多以 a 结尾的单词的文件 其中大部分是缩写 例如 etc p s 如何输出一个仅显示一次所有这些单词的列表 所有单词前面都有一个空格 因此可以使用该空格来查找单词的开头 没有一个单词出现在该行的开头 文件中没有句子 因此句点
  • Linux:在文件保存时触发 Shell 命令

    我想在修改文件时自动触发 shell 命令 我认为这可以通过注册 inotify 挂钩并调用来在代码中完成system 但是是否有更高级别的 bash 命令可以完成此任务 尝试 inotify 工具 我在复制链接时遇到问题 抱歉 但 Git
  • 从 php 执行 bash 脚本并立即输出回网页

    我有一组 bash 和 Perl 脚本 开发在 Linux Box 上部署所需的目录结构 可选 从svn导出代码 从这个源构建一个包 这在终端上运行良好 现在 我的客户请求此流程的 Web 界面 例如 某些页面上的 创建新包 按钮将一一调用
  • 如何从 bash 数组中删除元素而不展平数组

    我想创建一个采用 bash 数组的函数 如下所示 a element zero element one element two 并删除一个元素 如 元素一 并留下一个数组 如下所示 a element zero element two 这样
  • 如何通过保持目录结构完整来同步路径中匹配模式的文件?

    我想将所有文件从服务器 A 复制到服务器 B 这些文件在不同级别的文件系统层次结构中具有相同的父目录名称 例如 var lib data sub1 sub2 commonname filetobecopied foo var lib dat
  • 使用 su 和 Expect 脚本登录用户时遇到问题

    我正在为一个班级制作一个网站 您可以使用用户名和密码登录 然后它会将您带到一个显示您在班级中的成绩的页面 该网站正在运行bash脚本 https github com jduga002 rapache 并将托管在用户已有用户名和密码登录的计
  • 为什么 $((true == false)) 在 bash 中计算结果为 1?

    为什么 bash 有以下行为 echo true false 1 我本以为这会打印0 但它打印1 以下事实使情况变得更加复杂 gt echo true 0 gt echo false 0 gt echo true true 1 gt ech
  • 将二进制输出从文件输出重定向到 stdout

    我有一个专有的二进制文件 它顽固地接受两个文件作为参数 第一个作为输入 第二个作为输出 我想 构建第一个参数 不创建临时文件 使二进制写入标准输出而不是输出文件 第二个参数 我解决了第一个问题 lt 但不确定第二个参数 我编写了以下脚本 看
  • 如何将 glob 表达式分配给 Bash 脚本中的变量?

    当在 bash 脚本中执行以下两行代码时 ls 会抱怨文件不存在 dirs content dev01 dev02 ls l dirs 当我使用 x 选项运行脚本时 它似乎在单引号内传递变量 这将防止通配 dirs content dev0

随机推荐