使用 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 艺术也很安静,所以如果没有被切割它会很棒。
感谢您的帮助。
通过合并 catimg
和figlet
的输出生成 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
...
我正在尝试使用 bash.
创建类似 neofetch 的东西我想在右边显示一张图片和一张 ascii 艺术(使用 cat << EOF myascii EOF 命令) 这样我就可以在另一边显示徽标和文字。
我想在我的一些机器上使用它作为我的登录欢迎屏幕。
所以我可以通过以下方式展示 ascii 艺术:
cat << EOF
_____ _
|_ _| | |
| | ___ ___| |_
| |/ _ \/ __| __|
| | __/\__ \ |_
\_/\___||___/\__|
EOF
并使用 catimg myimage.png
不过我试着把它们并排展示。我尝试使用公关。
pr -m -t <(catimg) <(cat mytestfile.txt)
但它不起作用,它切断了我的 ascii 艺术。
使用粘贴命令也是一样
有没有人能做到。如果是怎么办? 我的 ascii 艺术也很安静,所以如果没有被切割它会很棒。
感谢您的帮助。
通过合并 catimg
和figlet
的输出生成 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
...