Shell, como extrair letras de $ line1 = “Teste isso… teste isso!” e imprima uma por uma

1

Estou escrevendo um script, que gostaria de incrementar um pouco.

O que eu preciso, é um loop, que pega uma letra por vez, incluindo espaço, e depois escreve na tela, como uma máquina de escrever antiga faria.

Eu gostaria de escrever algum tipo de pausa / sono entre a digitação, para parecer retro.

    
por Jesper Lykke 09.11.2014 / 11:14

2 respostas

0

Se você não se importa em não usar script de shell puro (por exemplo, você pode misturar awk ou perl), aqui está um exemplo usando o awk:

echo "This is... test this" |awk '{
  for (i=1; i <= length($0); i++) {
    printf substr($0,i,1);
    system("sleep 0.1");
  }
  print "";
}'
    
por 09.11.2014 / 11:25
0

Existem alguns utilitários GNU (por exemplo, pv pode fazer a tarefa echo "$line1" | pv -qL 10 ), mas se você quiser, pode fazê-lo no shell

#!/bin/bash
while [[ -n "$1" ]]
do
 sleep ${2:-"0.2"}
 printf "%c" "$1"
 temp=${1#?}
 set -- "$temp" "$2"
done
echo

USAGE: script.name 'text in single quotes' [interval time in seconds][1] Se você quiser usar a variável, faça o mesmo:

line1='Test this… test this!'
script.name "$line1" 0.3

[1]: interval time in seconds é opcional e a fração decimal é permitida

    
por 09.11.2014 / 11:25