我使用toilet编写了一个简单的管道,以便每次打开控制台时都可以打印出用户名,并且我希望能够使其始终如一地滑动,因为打印出的单词只有几行高。
toilet -t -f ivrit 'rob93c' | lolcat
我试图使用此脚本使其移动,但是由于它不动,我显然缺少了一些东西
while true; do echo ' ' && toilet -t -f ivrit 'rob93c' | lolcat
sleep 1
done
答案 0 :(得分:1)
slide() {
local -a content
local line prefixed_line cut_line
readarray -t content || return # read our stdin into an array
for ((prefix=0; prefix<=COLUMNS; prefix++)); do # loop increasing # of spaces
for line in "${content[@]}"; do # for lines in our input array...
printf -v prefixed_line "%${prefix}s%s" '' "$line" # first add spaces in front
cut_line=${prefixed_line:0:$COLUMNS} # then trim to fit on one line
printf '%s\n' "$cut_line" # finally, print our trimmed line
done
tput cuu "${#content[@]}" # move the cursor back up
done
}
用作:
toilet -t -f ivrit 'rob93c' | lolcat | slide
...或者,允许未安装所有这些工具的人进行测试:
printf '%s\n' 'one' ' two' ' three' | slide