शेल स्क्रिप्ट का उपयोग करके gnuplot में कमांड कैसे निष्पादित करें?


10

मैं जो करना चाहता हूं वह एक स्क्रिप्ट लिखना है जो पहले एक प्रोग्राम लॉन्च करता है और फिर इसे आदेशों के एक समूह को निष्पादित करने के लिए कहता है और फिर छोड़ देता है। एक उदाहरण के साथ चलें।

मैंने यह स्क्रिप्ट लिखी है myscript.shऔर यह उस तरह से काम नहीं करता जैसा मैं चाहता हूं। यह क्या करता है बस gnuplot चलाया जाता है और इसे छोड़ने के लिए प्रतीक्षा करता है और फिर अन्य कमांड चलाता है; जो स्पष्ट रूप से त्रुटियाँ पैदा करता है।

#!/bin/bash
gnuplot
plot sin(x)
pause -1
quit

मुझे लगता है कि यह स्पष्ट है कि मैं क्या करने की कोशिश कर रहा हूं; यदि नहीं, तो मुझे टिप्पणियों में बताएं।

जवाबों:


12

से man gnuplotया अपने ऑनलाइन मैनपेज :

   -p,  --persist  lets  plot  windows  survive after main gnuplot program
   exits.

   -e "command list" executes the requested commands  before  loading  the
   next input file.

तो जो आप शायद चलाना चाहते हैं वह निम्नलिखित कमांड है:

gnuplot -e "plot sin(x); pause -1"

अन्य वेरिएंट जो मैंने प्रस्तावित किए लेकिन जो उपयोगी नहीं थे वे थे:

gnuplot -p -e "plot sin(x); pause -1"
gnuplot -e "plot sin(x)"
gnuplot -p -e "plot sin(x)"

पहले 2 बिल्कुल वांछित उत्पादन का उत्पादन करते हैं। हालाँकि -pइस उदाहरण में बहुत काम का नहीं है; अगर आप टर्मिनल में एंटर दबाते हैं, तो gnuplot बाहर निकलता है और प्लॉट विंडो पूरी तरह से नॉन इंटरेक्टिव हो जाती है, सिवाय कमांड के। 3 का आउटपुट सिर्फ आता है और जाता है (बिल्कुल भी दिखाई नहीं देता)। अंतिम आउटपुट का उत्पादन करता है, लेकिन चूंकि gnuplot तुरंत बंद हो जाता है, प्लॉट विंडो फिर से गैर-संवादात्मक है (साथ ही, यह एक छोटे 1square सेमी प्लॉट को दिखाता है)। इसलिए pause -1जरूरी है।
मिहिर गाडगिल

@MihirGadgil प्रतिक्रिया के लिए धन्यवाद। मेरे उत्तर का संपादन किया।
बाइट कमांडर

16

एक तरीका है -persist:

#!/usr/bin/gnuplot -persist
set title "Walt pedometer" font ",14" textcolor rgbcolor "royalblue"
set timefmt "%y/%m/%d"
set xdata time
set pointsize 1
set terminal wxt  enhanced title "Walt's steps " persist raise
plot "/home/walt/var/Pedometer" using 1:2 with linespoints

एक और तरीका है, अगर आपको डेटा प्रीप्रोसेस करने की आवश्यकता है, तो एक बैश के साथ है Here Document(देखें man bash):

#!/bin/bash
minval=0    # the result of some (omitted) calculation
maxval=4219   # ditto
gnuplot -persist <<-EOFMarker
    set title "Walt pedometer" font ",14" textcolor rgbcolor "royalblue"
    set timefmt "%y/%m/%d"
    set yrange $minval:$maxval
    set xdata time
    set pointsize 1
    set terminal wxt  enhanced title "Walt's steps " persist raise
    plot "/home/walt/var/Pedometer" using 1:2 with linespoints
EOFMarker
# rest of script, after gnuplot exits

1
यह ("यहां-डॉक्टर" शेल विधि) संभवतया सामान्य उत्तर है जिसे ओपी ने देखा था। यह बहुत सारे कमांड-संचालित कार्यक्रमों के लिए काम करेगा (और यदि नहीं, तो आप इसे आगे बढ़ा सकते हैं expect...
Rmano

इसके अलावा आप निष्पादन योग्य के साथ स्क्रिप्ट बना सकते हैं chmod u+x myscript.gnuऔर साथ सीधे निष्पादित ./myscript.gnu एक नोट आप भूल जाते हैं बस []yrange में: set yrange [$minval:$maxval]
हस्त्तूर

3

जैसा कि manपृष्ठों में बताया गया है , gnuplotकमांड फाइल से इनपुट की अपेक्षा करता है जिसे बैच सत्र कहा जाता है । आप उदाहरण के plot sin(x)लिए फ़ाइल में लाइन लिख सकते हैं myplotऔर फिर निष्पादित कर सकते हैं gnuplot myplot

यदि आप कमांड फाइल को छोड़ देते हैं, जैसा कि आपकी स्क्रिप्ट करती है, तो आपको एक इंटरैक्टिव सत्र मिलेगा ।


ठीक है, मुझे लगता है कि यह एक इंटरैक्टिव सत्र में कूद रहा है, लेकिन क्या उस इंटरैक्टिव सत्र में उसी sctipt के माध्यम से कमांड खिलाने का कोई तरीका नहीं है? इसके अलावा, क्या आप अधिक सामान्य उत्तर दे सकते हैं (gnuplot के लिए विशिष्ट नहीं)? धन्यवाद!
मिहिर गाडगिल 14

नहीं, सभी अनुप्रयोग उसी तरह इनपुट नहीं करते हैं। इसका सामान्यीकरण करने का कोई तरीका नहीं है।
जोस

@ मिहिरगडगिल - सभी प्रोग्राम एक ही तरह से काम नहीं करते हैं ... आप किन अन्य का उपयोग करना चाहते हैं?
Wilf

@ ओह ओह, मैं देख रहा हूँ, धन्यवाद! विल्फ मैंने पहले भी लिनक्स का उपयोग किया है, लेकिन बड़े पैमाने पर नहीं, अब और जानने की कोशिश कर रहा है। मेरे मन में ऐसा कोई कार्यक्रम नहीं है; बस मैं इस एक समस्या से जितना हो सकता है सीखने की कोशिश कर रहा हूं।
मिहिर गाडगिल

0

यहाँ उल्लेखित विधि Gnuplot के साथ और साथ ही कई अन्य कार्यक्रमों के साथ अत्यधिक उपयोगी है। यहाँ-डॉक्टर में Gnuplot कमांड के भीतर शेल वेरिएबल्स का उपयोग करके, आप अपने शेल स्क्रिप्ट की कमांड लाइन से इनपुट के साथ अपने प्लॉटों को पैरामीटर कर सकते हैं। Cagily चीजों को सेट करके, आप "बड़े डेटा" की विशाल टुकड़ियों से बड़े पैमाने पर भूखंडों का उत्पादन कर सकते हैं। मैं 20,000 से 80,000 अंक प्रति PLOT के साथ लगातार दिखने वाले तितर बितर भूखंडों का उत्पादन करने के लिए इस्तेमाल किया था सैकड़ों संरचनात्मक गतिकी परिमित विश्लेषण बिल्कुल इस पद्धति का उपयोग करके चलता है। यह बहुत शक्तिशाली विधि है।


1
अपने उत्तर को पूरा करने के लिए, क्या आप एक उदाहरण जोड़ सकते हैं कि यहां बताई गई विधि का उपयोग कैसे करें?
मेलेबियस

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.