यह सवाल 3 भागों में है, और प्रत्येक अकेले आसान है, लेकिन एक साथ संयुक्त नहीं तुच्छ (कम से कम मेरे लिए) है :)शैल स्क्रिप्ट तर्कों में "-" कैसे संभाल लें?
एक स्क्रिप्ट क्या अपने तर्कों के रूप में लेना चाहिए लिखने की आवश्यकता है:
- एक आदेश के लिए
- कई तर्क एक और आदेश के नाम फ़ाइलों की
- सूची
उदाहरण:
./my_script head -100 a.txt b.txt ./xxx/*.txt
./my_script sed -n 's/xxx/aaa/' *.txt
और इसी तरह।
किसी कारण मैं भेद
- आदेश
- आदेश के लिए तर्क हैं क्या है क्या जरूरत के लिए मेरी स्क्रिप्ट के अंदर
- क्या फ़ाइलों
तो शायद सबसे रहे हैं मानक तरीका ऊपर दिए गए उदाहरण लिखते हैं:
./my_script head -100 -- a.txt b.txt ./xxx/*.txt
./my_script sed -n 's/xxx/aaa/' -- *.txt
प्रश्न 1: क्या कोई बेहतर समाधान है? ./my_script (पहला प्रयास) में
प्रसंस्करण:
command="$1";shift
args=`echo $* | sed 's/--.*//'`
filenames=`echo $* | sed 's/.*--//'`
#... some additional processing ...
"$command" "$args" $filenames #execute the command with args and files
यह समाधान विफल हो जाएगा जब filenames
spaces
में शामिल होंगे और/या '-', उदा
/कुछ - path/to/अधिक/मूर्खतापूर्ण फ़ाइल name.txt
Question2: कैसे ठीक से $command
अपने $args
और $filenames
बाद में निष्पादन के लिए मिल सकता है?
प्रश्न 3: - निष्पादन की निम्न शैली को कैसे प्राप्त करें?
echo $filenames | $command $args #but want one filename = one line (like ls -1)
क्या यहां अच्छा खोल समाधान है, या उदाहरण के लिए उपयोग करने की आवश्यकता है?
यह ठीक से जवाब देने के लिए कुछ समय लग जाएगा। 1. बैक-टिक्स का उपयोग क्यों करें?वे रास्ते से वंचित हैं और जब तक आप सोलारिस या एईक्स पर रूट के रूप में बहुत अधिक काम करने की उम्मीद नहीं करते हैं, जरूरी नहीं है। $ (Cmd) का प्रयोग करें! 2. (आपके प्रश्न के लिए अधिक), गेटोपेट और गेटोपेट्स (खोल के लिए) पर पढ़ें। मैंने यहां कई उदाहरण देखे हैं, कम से कम एक जो काफी विस्तृत है। कुछ समय के साथ युग्मित (($ #> 0)) प्रक्रिया करें ARR; खिसक जाना ; किया 'मदद करेगा। 3. केस स्टेटमेंट का उपयोग करने पर विचार करें। '--' के लिए आपको उन्हें बचाना होगा या उन्हें उद्धृत करना होगा या इसे '[-] [-] जैसे charclass में परिवर्तित करना होगा। – shellter