विभिन्न तर्कों के साथ एक कमांड को बार-बार कैसे निष्पादित किया जाए?


11

मैं उबंटू पर हूं। मैंने कुछ तर्कों की नकल की (न्यूलाइन द्वारा अलग) और मैं उन्हें इस तरह से प्रिंट करने के लिए xsel का उपयोग कर सकता हूं

$ xsel
arg1
arg2
arg3
arg4
...

अब, मैं इनमें से प्रत्येक तर्क का उपयोग किसी अन्य कमांड के लिए करना चाहता हूं और उस कमांड को निष्पादित करता हूं, जहां कई बार तर्क होते हैं।

इसलिए मैंने कोशिश की

$ xsel | mycommand "constantArgument" $1

हालांकि, यह mycommandकेवल पहले तर्क के लिए निष्पादित किया गया। मैं इसे हर तर्क के लिए कैसे निष्पादित कर सकता हूं?


इस तथ्य को प्रतिबिंबित करने के लिए प्रश्न का संपादन किया कि मायकॉम के लिए एक से अधिक तर्क हैं।
वेस

जवाबों:


12

आप बस उपयोग कर सकते हैं xargs

xsel | xargs -n1 echo mycommand 

-n1 मायकॉम के लिए एक arg का मतलब है, लेकिन यह सिर्फ ड्राई रन है, यह दिखाएगा कि इसे हटाने के लिए क्या चल रहा है echo

निरंतर तर्क के लिए

xsel | xargs -I {} -n1 echo mycommand "constantArgument" {}

क्या होगा यदि "mycommand" एक से अधिक तर्क की अपेक्षा करता है जिसमें से xsel में सिर्फ एक तर्क है?
वेस

xsel | xargs -n1 echo mycommand -more-arg
राहुल पाटिल

xsel | xargs -n2 echo mycommandदो आदेश प्रति आदेश
राहुल पाटिल

7
xsel | while read line; do mycommand "$line"; done

या ऐसा ही कुछ। आप यह भी उपयोग कर सकते हैं xargs, जो कमांड लाइन तर्कों के हेरफेर के लिए एक बहुत शक्तिशाली आदेश है।


1

थोड़ी सी अनुकूलन के लिए:

printf "${CMD} %s ${ARG2}\n" `xsel` | sh -n

आप -noexecuteध्वज को हटाने के बाद देख सकते हैं कि यह कैसे काम करता है।

यदि यह आपके लिए काम करता है, तो आप shपूरी तरह से छोड़ सकते हैं और इसके बजाय ऐसा कर सकते हैं :

. <<HERE /dev/stdin
    $(printf "${CMD} %s ${ARG2}\n" `xsel`)
HERE

या तेज:

printf "${CMD} %s ${ARG2}\n" `xsel` | . /dev/stdin

किसी भी तरह से आसान है और यह करेंगे।

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