在读取文件时Bash用户提示

时间:2011-12-07 21:02:45

标签: bash

我正在尝试在Bash中逐行读取文件时创建用户提示。我的想法是让我使用Gnuplot逐个绘制各种文件。这就是我所拥有的:

#!/bin/bash
echo "Enter filename that contains the filenames:"
read fname
xr="[1e8:1e20]"
yr="[1:1e13]"

while read line
do
  echo -e "reset\nset log\nset xrange$xr\nset yrange$yr\nset xlabel \"Frequency [Hz]\"\nset ylabel \"F_{/Symbol n} [Jy Hz]\"\nset key top left\nplot \"$line.dat\" u 3:(\$3*\$4)*1e26 w l ti \"$line^o\" \n"> plt.gp
gnuplot plt.gp
done < $fname

我想输入用户输入/“继续?”在“gnuplot plt.gp”命令之前键入一个东西,因为此刻它只是快速绘制所有内容然后退出。标准的read -p命令在这里不起作用。我在某处读到了我可能需要使用文件描述符exec 5命令,但我不明白。感谢。

1 个答案:

答案 0 :(得分:6)

#!/bin/bash

read -p 'Enter filename that contains the filenames: ' fname

xr="[1e8:1e20]"
yr="[1:1e13]"

while read line
do
    echo -e "reset\nset log\nset xrange$xr\nset yrange$yr\nset xlabel \"Frequency [Hz]\"\nset ylabel \"F_{/Symbol n} [Jy Hz]\"\nset key top left\nplot \"$line.dat\" u 3:(\$3*\$4)*1e26 w l ti \"$line^o\" \n"> plt.gp
    gnuplot plt.gp

    read -p 'Do you want to continue? [Y/n]: ' want_to_continue </dev/tty
    case "${want_to_continue}" in
    Y|y)
        continue
        ;;
    *)
        echo "OK. Bye!"
        break
        ;;
    esac
done < ${fname}