如何使bash脚本在新行上终止

时间:2011-06-16 05:17:22

标签: bash input sh

这是出于学习目的。我写了一个模拟打字的脚本。

用法是:

$ typewriter (insert some text here)

然后脚本会以随机的方式回显它,看起来像是在打字。很好,但问题是,如果输入包含分号(;)则会中断。

例如:

$ typewriter hello; world

我想这是一个简单的修复。我只是想不出来。

提前致谢!

CODE:

#!/bin/bash
#Displays input as if someone were typing it

RANGE=4
the_input=$*
if [ x$* = "x" ] || [ x$* = "xusage" ] || [ x$* = "xhelp" ] || [ x$* = "x--help" ];
then
        echo "Usage: typewriter <some text that you want to look like it's typed>"
        exit 1

fi
  while [ -n "$the_input" ]
  do
    number=$RANDOM
    let "number %= RANGE"
    printf "%c" "$the_input"
    sleep .$number
    the_input=${the_input#?}
  done
  printf "\n"

2 个答案:

答案 0 :(得分:5)

不是真的:;表示命令的结束。管道和输入/输出重定向(|<>),具有意义的符号,你会遇到类似的问题。

唯一的选择是将参数放在引号中。

typewriter "some; text<>| that should be displayed"

答案 1 :(得分:2)

您还可以修改脚本以从stdin中读取:

the_input=`cat`

cat命令会将来自用户的所有输入分配给the_input,直到输入^ D.

优点是用户可以键入多行和间距 该行内将被保留。

整洁的脚本!