2011-12-07 38 views
4

我正在嘗試在Bash中逐行讀取文件時創建用戶提示。這個想法是讓我用Gnuplot一個接一個地繪製各種文件。這裏是我有:閱讀文件時Bash用戶提示

#!/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」命令之前鍵入內容,因爲此時它只是快速繪製所有內容,然後退出。標準讀取-p命令在這裏不起作用。我在某處可能需要使用文件描述符exec 5命令,但我不明白。謝謝。

+0

so call'read another_line' .. – 2011-12-07 21:03:46

+0

@Vlad Lazarenko:謝謝。你能否給我詳細說明我將如何使用它?我搜索了閱讀another_line,但找不到任何示例。 – Omar

+0

沒問題,看我的答案。 – 2011-12-07 21:49:28

回答

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} 
+0

謝謝你這樣一個完整的例子。它完美的工作,我已經瞭解了一些關於Bash腳本的東西:-) – Omar

+0

@Omar:不客氣。歡迎來到電路板BTW :) – 2011-12-07 22:54:32