ksh

2011-10-26 7 views
19

में चर और मानक आउटपुट में कमांड आउटपुट रीडायरेक्ट करें मेरे पास कुछ खोल कमांड है। मैं आउटपुट को मानक आउटपुट में लिखना चाहता हूं और इसे वैरिएबल में भी सहेजना चाहता हूं। मैं इसे एक कमांड के साथ हल करना चाहता हूं। मैंने इन चीजों की कोशिश की है।ksh

ls > $VAR   # redirects the output to file which name is stored in $VAR 
ls | tee -a $VAR # writes to standard output as well as in file which name is stored in $VAR 
VAR=`ls`   # output into $VAR, but it is not sent to standard output 
VAR=`ls`;echo $VAR # ok, it works but these are two commands 

कोई विचार?

+0

बस 1 लाइन सीमा के बारे में उत्सुक है। जो मुझे सिस्टम लक्ष्य के उपयोगकर्ता के रूट की जड़ नहीं देता है। मैं नहीं समझ सकता कि आपके पास उस सीमा क्यों है। वैसे भी मैंने आपको "खुद को" उत्तर पोस्ट किया है। – erm3nda

उत्तर

46

कैसे के बारे में:

VAR=$(ls | tee /dev/tty) 
+1

यह काम करता है, बहुत बहुत धन्यवाद। –

+0

आपके ओएस के आधार पर, 'var = $ (ls | tee/proc/$$/fd/1)' भी काम कर सकता है। –

+0

भले ही यह पूरी तरह से काम कर रहा है, मैं आपको "ऐसा करने का तरीका" उदाहरण पोस्ट करता हूं। मैं एक लिनक्स/बैश नोब हूं, लेकिन मुझे उन युक्तियों को सीखना पसंद है: डी – erm3nda

3

@Gary_Barker से महान जवाब है, लेकिन यह सब सिस्टम पर संभव नहीं है।

हमारी टीमसिटी पर एक चार-कंसोल नहीं है। और एक और छोटी समस्या है।

अगर मैं

VAR=$(ls -1); echo $VAR

का उपयोग यह एक ही तरह ls -1

मेरे समाधान, काम करता है अगर यह बात नहीं है, कि उत्पादन त्रुटि पाइप से आता नहीं है।

VAR=$(ls -1 | tee >&2)

+0

यदि परिणाम एक से अधिक पंक्ति है तो गूंज को दोहराएं सुनिश्चित करें। 'VAR = $ (एलएस -1); echo "$ VAR" '। अन्यथा यह एक पंक्ति में घुमाया जाता है – hoss

+0

@ होस आप समझा सकते हैं कि ऐसा क्यों होता है? –

0

के रूप में मैं समझता हूँ, VAR=`ls`;echo $VAR ठीक है, लेकिन आप पसंद नहीं है क्योंकि इस पर 2 आदेशों है।

जबकि @ गैरी-बार्कर काम कर रहा है, मैंने सभी प्रणालियों पर जांच नहीं की है। अगर आपको टी या किसी अन्य के साथ समस्या हो रही है, तो आप अपना खुद का निर्माण कर सकते हैं।

मुझे नहीं पता कि क्या आप जानते हैं, लेकिन लिनक्स पर आप जिन प्रोग्रामों का उपयोग कर सकते हैं, वे सिस्टम पर छोटी बाइनरी का उपयोग करके कोड का एक समूह हैं। हालांकि यह सच है, 1 या 2 कॉमन्स के उपयोग के बारे में कोई जानकारी नहीं है, क्योंकि अंतिम निष्पादन वास्तव में छोटे लोगों का समूह है।

तो, यदि आपकी वास्तविक समस्या यह है कि आप केवल अपने लक्ष्य में एक ही कमांड लिख सकते हैं, तो आप अपने स्वयं के "ऐप" को लिख सकते हैं, एक स्क्रिप्ट स्क्रिप्ट/sbin फ़ोल्डर को बिना .sh एक्सटेंशन के छोड़े जा सकते हैं (क्योंकि इन नाम से ./ या श उपसर्ग और नहीं के साथ excecuted कर रहे हैं)

मैंने लिखा उदाहरण के रूप में है कि:

#!/bin/bash if [ $1 ] then VAR=$*; echo $VAR fi

इस उदाहरण के लिए मैं फ़ाइल बनाने/sbin/varrun है। मैं सफल (सामान्य) उत्पादन के साथ folling आदेशों के साथ यह कोशिश की है:

  • varrun ls
  • varrun uname
  • varrun uname -a

ध्यान दें कि मैं के साथ "उद्धरण" का प्रयोग नहीं किया गया है आदेशों पर रिक्त स्थान।

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