2016-07-14 3 views
0

Ich habe ein Bash-Skript, um das Plotten mit gnuplot zu automatisieren, jedoch funktioniert der Ladebefehl innerhalb gnuplot nicht im Bash-Skript. Der Befehl bleibt einfach hängen.Gnuplot laden funktioniert nicht in einem Bash-Skript

Hier ist meine Bash-Skript:

#!/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 

t-dos.plt enthält:

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 

Meine Ausgabe ist wie:

die gnuplot betreten und dort

+0

Ihre Frage ist so formatiert, nicht gut. Bitte füge deinen Code ein, um dies zu beheben. – mhoff

+0

Wenn ich einfach gnuplot eintippe und die .plt-Datei in ein bestimmtes Verzeichnis lade, funktioniert das einwandfrei. Aber es funktioniert nicht im Bash-Skript. OMG ... –

+2

Verwenden Sie einfach 'gnuplot t-dos.plt' in der Mitte. –

Antwort

2

Wenn Ihr bash für immer bleiben Skript läuft gnuplot, es ist jetzt saß warten Damit Gnuplot beendet wird, bevor weiter fortgefahren wird, versucht es dann, einen Befehl auszuführen, der load aufgerufen wird (und wahrscheinlich fehlschlägt). Gnuplot selbst wartet auf Eingabe und gibt die Illusion, dass Ihr Skript pausiert oder hängen bleibt.

Was Sie erwarten, ist für jeden Text nach der gnuplot Linie magisch in die gnuplot Schnittstelle eingegeben werden, bash Skripte funktionieren nicht so.

0

Es gibt zwei Dinge, die Sie tun können. Die erste wurde in den Kommentaren vorgeschlagen:

gnuplot t-dos.plt 

Die andere wäre ein „hier Dokument“ werden:

gnuplot << GNUPLOT 

load t-dos.plt 

GNUPLOT