Как я могу распечатать конвейер оболочки и вставить слово слева направо в консоли? - PullRequest
0 голосов
/ 15 марта 2019

Я использовал Туалет , чтобы написать простой конвейер для распечатки моего имени пользователя каждый раз, когда я открываю консоль, и я хотел, чтобы она могла последовательно скользить, поскольку напечатанное слово имеет высоту в несколько строк.

toilet -t -f ivrit 'rob93c' | lolcat

Вывод сценария

Я пытался использовать этот скрипт, чтобы он сдвигался, но я явно что-то упустил, так как он не двигается

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

1 Ответ

1 голос
/ 15 марта 2019
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
...