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

Show two things side by side using catimg (like in neofetch)

我正在尝试使用 bash.

创建类似 neofetch 的东西

我想在右边显示一张图片和一张 ascii 艺术(使用 cat << EOF myascii EOF 命令) 这样我就可以在另一边显示徽标和文字。

我想在我的一些机器上使用它作为我的登录欢迎屏幕。

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

cat << EOF

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

EOF

并使用 catimg myimage.png

显示我的图片

不过我试着把它们并排展示。我尝试使用公关。 pr -m -t <(catimg) <(cat mytestfile.txt) 但它不起作用,它切断了我的 ascii 艺术。

使用粘贴命令也是一样

有没有人能做到。如果是怎么办? 我的 ascii 艺术也很安静,所以如果没有被切割它会很棒。

感谢您的帮助。

通过合并 catimgfiglet

的输出生成 txt 文件

而不是真正的 merge,我将使用 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  in 
            -w) shift;width=;shift;;
            -p) shift;prcent=;shift;;
            -f) shift;ffont="-f ";shift;;
        esac
    done
    text="" image=""
    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  in 
            -w) shift;width=;shift;;
            -p) shift;prcent=;shift;;
            -f) shift;ffont="-f ";shift;;
        esac
    done
    image="" text=""
    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...