如何在控制台中打印shell管道并将单词从左向右滑动?

时间:2019-03-15 15:28:51

标签: bash shell zsh pipeline

我使用toilet编写了一个简单的管道,以便每次打开控制台时都可以打印出用户名,并且我希望能够使其始终如一地滑动,因为打印出的单词只有几行高。

toilet -t -f ivrit 'rob93c' | lolcat

Script output

我试图使用此脚本使其移动,但是由于它不动,我显然缺少了一些东西

while true; do echo ' ' && toilet -t -f ivrit 'rob93c' | lolcat
sleep 1
done

1 个答案:

答案 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