2016-07-14 79 views
0

我有一个bash脚本来使用gnuplot来自动绘图,但是gnuplot中的加载命令在bash脚本中不起作用。该命令只是卡住了。gnuplot加载不能在bash脚本中工作

这里是我的bash脚本:

#!/bin/bash 

for k in _1 +1 _2 +2 _3 +3 _4 +4 _5 +5 _6 +6 
do 
    cd $k/surface 

    for i in s ss 
    do 
     cd $i 
     for j in `ls -d */` 
     do 
      if [ "$j" != "unrelax/" ]; then 
       cd $j/spin 
       echo $k$i$j 

       gnuplot 
       load 't-dos.plt' 
       exit    

       cd ../../ 
      fi 
     done  
     cd .. 
    done  
    cd ../../ 
done 

​​包含:

cat > t-dos.plt << eof 
fermi=$(head -6 DOSCAR | tail -1 | awk '{print $4}') 
plot 't-dos' u (\$1-fermi):2 w l 
replot 't-dos' u (\$1-fermi):3 w l 
set term post enhanced color 
set output 't-dos.ps' 
rep 
eof 

我的输出是这样的:

进入gnuplot的,并永远呆在那里

+0

你的问题没有得到很好的格式化。请缩进你的代码来解决这个问题。 – mhoff

+0

如果我只是键入gnuplot并将.plt文件加载到特定的目录中,它就可以很好地工作。但它在bash脚本中不起作用。 OMG ... –

+2

只需在中间使用'gnuplot t-dos.plt'。 –

回答

2

当你的bash脚本运行gnuplot,它现在坐在等待让gnuplot在继续之前退出,然后尝试运行一个名为load(可能失败)的命令。 gnuplot本身就坐在等待输入的幻觉,你的脚本暂停或挂起。

你期望发生的是gnuplot行被神奇地输入到gnuplot接口之后的任何文本,bash脚本不会以这种方式工作。

0

有两件事你可以做。第一个建议的意见:

gnuplot t-dos.plt 

其他将使用“立即文档”:

gnuplot << GNUPLOT 

load t-dos.plt 

GNUPLOT