ईओएफ के बाद बिना किसी प्रक्रिया के स्टड के डेटा को पाइप करना


33

मेरे पास एक निष्पादन योग्य है जो एक उपयोगकर्ता-इंटरैक्टिव शेल शुरू करता है। मैं खोल के लॉन्च पर, पहले कुछ कमांड इंजेक्ट करना चाहूंगा, फिर उपयोगकर्ता को अपने इंटरैक्टिव सत्र के लिए अनुमति देगा। मैं इसे आसानी से उपयोग कर सकता हूं echo:

echo "command 1\ncommand 2\ncommand3" | ./shell_executable

यह लगभग काम करता है। समस्या यह है कि इको कमांड जो कि प्रक्रिया के स्टड को खिला रही है, एक बार ईओएफ को हिट करती है, क्योंकि यह मेरे कमांड को इको कर रहा है। यह EOF शेल को तुरंत समाप्त करने का कारण बनता है (जैसे कि आपने शेल में Ctrl + D दबाया होगा)।

वहाँ एक EOF के कारण के बिना इन आदेशों को स्टड में इंजेक्ट करने का एक तरीका है?


क्या आपने ./shell_executableआदेशों की सूची के अंत में जोड़ने का प्रयास किया है ? हो सकता है कि आप इसे जारी रखें, हालांकि आपके पास दो चलने वाले उदाहरण (माता-पिता और बच्चे) होंगे।
गोल्डीलॉक्स

जवाबों:


40

पर एक ऐसी ही सवाल में इस चतुर जवाब मिला stackoverflow

(echo -e "cmd 1\ncmd 2" && cat) | ./shell_executable

यह ट्रिक करता है। Shell_executable के इनपुट स्ट्रीम में catआउटपुट में पंप करेगा echoऔर EOF तक अधिक इनपुट की प्रतीक्षा करेगा।


@ jw013 आप सही हैं। मैंने पोस्ट को एडिट किया। धन्यवाद। जब मैंने w / o कोष्ठक का प्रयोग किया, तो मैंने cmd 1वापस लिखा देखा, लेकिन यह महसूस नहीं किया कि यह o / p द्वारा उत्पन्न होना चाहिए थाcmd 1
Gowtham

यह काम करता है! आपने अभी मुझे एक टन समय बचाया है। धन्यवाद!!
jaggedsoft

22

यह करने के लिए स्पष्ट तरीका शायद की तरह कुछ देखने के लिए है bashके --rcfileविकल्प। अपने कस्टम कमांड को अपनी कस्टम फ़ाइल में रखें और इसे इंटरेक्टिव शेल को स्टार्ट-अप पर चलाने के लिए पास करें।

यदि ऐसा कोई विकल्प मौजूद नहीं है, तो आप निम्नलिखित प्रयास भी कर सकते हैं:

cat custom_commands_file - | ./shell_executable

cat-स्टड के रूप में व्याख्या करेगा ।


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