bash - 使用 catimg 并排显示两件事(如在 neofetch 中)
问题描述
我正在尝试使用 bash 创建类似 neofetch 的东西。
我想在右侧显示一个图像和一个 ascii 艺术(使用 cat << EOF myascii EOF 命令),以便我可以在另一侧显示徽标和文本。
当我 ssh 我的一些机器时,我想将它用作我的登录欢迎屏幕。
因此,我能够通过以下方式展示 ascii 艺术:
cat << EOF
_____ _
|_ _| | |
| | ___ ___| |_
| |/ _ \/ __| __|
| | __/\__ \ |_
\_/\___||___/\__|
EOF
并使用显示我的图像catimg myimage.png
但是,我尝试并排展示它们。我尝试使用公关。
pr -m -t <(catimg) <(cat mytestfile.txt)
但它不起作用,它削减了我的 ascii 艺术。
使用粘贴命令也是如此。
有没有人能做到。如果是怎么办?我的 ascii 艺术也很安静,所以如果没有它被切割它会很棒。
谢谢你的帮助。
解决方案
通过合并catimg
和的输出生成txt文件figlet
我将使用ANSI 转义码简单地将两个输出放在正确的位置,而不是真正的合并
{
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长度)
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%
80列宽度的图像:
mkImageText -f small -p 42 spongebob.png "Sponge Bob"
或者
mkTextImage -f small -p 58 "Sponge Bob" spongebob.png
将渲染:
然后你可以尝试使用-f smblock
选项,或者修改函数来使用toilet
而不是figlet
......
推荐阅读
- javascript - 限制 ocr 扫描的图像大小
- service-worker - Workbox Service Worker 未在缓存中存储图像和 API 响应
- javascript - 将参数传递给动态导入反应
- json - 如何在 Swift 中为常量 Decodable 对象动态添加属性?
- spring - 如何使用 Spring Rest 修复 Google App Engine 中的未经授权的错误?
- c# - 将演示文稿添加到新打开的 PowerPoint 应用程序 - 例外
- php - Preg_replace 在 php 中无法正常工作为 $(dollar) 符号
- makefile - 从 Makefile 规则打印粗体或彩色文本
- php - Laravel 问题我需要帮助
- r - Imports 字段中的命名空间未导入自:应使用所有声明的 Imports