2009-12-28 27 views
10

मैं whiptail का उपयोग करने की कोशिश कर रहा हूं क्योंकि यह dialog का हल्का विकल्प है और अधिकांश सिस्टमों में डिफ़ॉल्ट रूप से स्थापित किया जाता है (यानी, लोगों को चारों ओर जाना नहीं है और इसे इंस्टॉल करना है या नहीं, अगर इसे "भूल गया" डिफ़ॉल्ट रूप से)। मैंने यहां कुछ उदाहरणों के लिए question #1562666 चेक किया है, लेकिन मैं आउटपुट को रीडायरेक्ट करने के लिए एक विकल्प की तलाश में हूं ताकि डिस्क पर लिखने के बजाय पर्यावरण चर सेट हो।whiptail: आउटपुट वैरिएबल में आउटपुट को रीडायरेक्ट कैसे करें?

उदाहरण के लिए, जब मैं संवाद के साथ प्रयास करें, यह काम करता है (मैं संवाद बॉक्स देखते हैं, और एक वातावरण चर सेट किया गया है):

result=$(dialog --output-fd 1 --inputbox "Enter some text" 10 30) 
echo Result=$result 

हालांकि, इस के स्थान पर whiptail का उपयोग करते समय काम नहीं करता है संवाद, क्योंकि संवाद बॉक्स कभी दिखाई नहीं देता है। मैं एक डिस्क फ़ाइल करने के लिए इसे पुन: निर्देशित और इसे पढ़ा, उदाहरण के लिए के लिए है:

result=$(tempfile) ; chmod go-rw $result 
whiptail --inputbox "Enter some text" 10 30 2>$result 
echo Result=$(cat $result) 
rm $result 

यह काम करता है, और मैं (इसे हटाने जब स्क्रिप्ट समाप्त होता है) समाप्त करने के लिए शुरू से ही एक ही tempfile उपयोग कर सकते हैं। लेकिन यह सिर्फ इसके लिए डिस्क का उपयोग करने के लिए मजबूर होना अजीब लगता है, इसे सभी स्मृति में रखने के बजाय (एक पर्यावरण परिवर्तक पर रीडायरेक्ट करना)।

तो मैं पूछ रहा हूं: क्या मैं कुछ भूल रहा हूं - या क्या मैं वास्तव में को whiptail का उपयोग करते समय डिस्क का उपयोग करना है?

आपकी प्रतिक्रिया के लिए अग्रिम धन्यवाद।

+0

यह जब भी whiptail है की तरह लगता है अपने stdin/stdout पुनर्निर्देशित, यह नहीं दिखाता है (चाहे $ (...) या ... |) के साथ। आपका समाधान whiptail के व्यवहार के रूप में बहुत अच्छा लग रहा है। बीटीडब्ल्यू, मेरी डेबियन मशीन पर, मेरे पास व्हीप्टाइल है लेकिन डिफ़ॉल्ट रूप से कोई संवाद नहीं है, ओपन्यूज पर, मेरे पास संवाद है और आधिकारिक भंडार में कोई मौजूदा व्हीप्टाइल नहीं है। – Zeograd

+0

@ ज़ीग्राड कम से कम आरएचईएल व्हिप्टाइल पर "नया" पैकेज आता है। – Kimvais

+0

दाएं, thx Kimvais। "zypper search whiptail" मुझ पर असफल रहा, भले ही जानकारी यह बता रही हो कि – Zeograd

उत्तर

28

ऐसा इसलिए है क्योंकि whiptail इनपुट बॉक्स मुद्रित करने के लिए stdin और stdout का उपयोग करता है, तो आप के लिए stdout सीधे stderr रीडायरेक्ट नहीं कर सकता है, लेकिन आप उन्हें स्वैप करने के लिए की जरूरत है, उदाहरण के लिए:

foobar=$(whiptail --inputbox "Enter some text" 10 30 3>&1 1>&2 2>&3) 
+4

मैंने सत्यापित किया कि उपर्युक्त काम करता है। –

+2

टैग की गईं वर्कफ़ॉर्म। धन्यवाद Kimvais! – jbatista

+0

मेरे पास एक प्रश्न है। Whiptail के अंत में आप '3> और 1 1> और 2 2> और 3' क्यों डालते हैं? इसके बिना आदेश काम नहीं कर रहा है, लेकिन मुझे नहीं पता क्यों। –

2

ऐसा प्रतीत होता है कि whiptail (1) टर्मिनल को टीईआरएम पर्यावरण चर की सेटिंग के आधार पर अपना नियंत्रण आउटपुट लिखता है। संक्षेप में, आप एक चर सेट करने के लिए whiptail (1) की मानक आउटपुट स्ट्रीम का उपयोग नहीं कर सकते हैं। इसके अलावा, whiptail (1) मानक त्रुटि स्ट्रीम में इनपुट बॉक्स के उपयोगकर्ता इनपुट इनपुट लिखता है, फिर, आप एक चर सेट करने के लिए अपने मानक आउटपुट स्ट्रीम का उपयोग नहीं कर सकते हैं।

संबंधित मुद्दे