क्या linux में कमांड ऑप्शन का क्रम मायने रखता है?


15

उदाहरण के लिए, जब मैंने या तो प्रवेश किया था:

gcc -O hello.c -c

या

gcc hello.c -c -O

दोनों ने शिकायत नहीं की।

क्या कमांड विकल्प का क्रम मायने रखता है?

जवाबों:


19

यह कार्यक्रम पर ही निर्भर करता है; ऑपरेटिंग सिस्टम मामलों को क्रमबद्ध करता है या नहीं।

जीसीसी के विकल्पों का सेट इतना बड़ा है कि मैं किसी भी प्राधिकरण के साथ नहीं कह सकता हूं यदि आप किसी भी विकल्प को मनमाने तरीके से आपूर्ति कर सकते हैं ; आपको उस विकल्प के लिए प्रलेखन पढ़ना होगा। उस ने कहा, अंगूठे का एक सामान्य नियम यह है कि यदि आपके पास दो या अधिक पारस्परिक रूप से अनन्य विकल्प हैं (जैसे कि -O1 -O2अनुकूलन के विभिन्न स्तरों के लिए), तो कार्यक्रम आम तौर पर पहले वाले लोगों के बाद के विकल्प लेंगे। फिर, यह लिनक्स द्वारा लागू नहीं किया गया है।

एक सरल प्रोग्राम जो आपको किसी भी क्रम में अधिकांश विकल्प निर्दिष्ट करने देता है ls। वर्तमान निर्देशिका की सभी फाइलों को विस्तार के साथ सूचीबद्ध किया जा सकता है ls -la, ls -alया ls -l -a। हालाँकि, ls -l1 (जो कि 'el' 'one' है) ls -1l ('one' 'l') के समान आउटपुट नहीं देता है। ये पारस्परिक रूप से अनन्य विकल्प हैं, और अंतिम सूचीबद्ध ओवर दी गई पहली सवारी है।

वहाँ भी अजीब कार्यक्रम है जो तर्क के विकल्प पर लागू होता है जैसे ही वे आते हैं। इसलिए, उदाहरण के लिए, आपके पास एक काल्पनिक आदेश हो सकता है blah -a 1 2 -b 3जहां -aसभी तीन तर्कों -bपर लागू होता है , लेकिन केवल उसी पर लागू होता है 3

फिर, यह प्रश्न में व्यक्तिगत कार्यक्रम पर निर्भर है। यदि आप कभी अनिश्चित हैं, तो दस्तावेज़ीकरण पढ़ें।


BTW, ls -al path/to/dirमान्य है, लेकिन ls path/to/dir -alनहीं है। तो ls, आपको (वैकल्पिक) निर्देशिका से पहले अपने विकल्पों को रखना होगा जिनकी सामग्री आप सूचीबद्ध करना चाहते हैं।
jvriesem

6

ऐसे मामले हैं जहां जीसीसी में भी कमांड लाइन विकल्प का क्रम मायने रखता है। यदि आप स्थैतिक पुस्तकालयों (.A) के साथ लिंक कर रहे हैं, तो यदि आप निर्दिष्ट करते हैं -llib1 -llib2और इसमें एक फ़ंक्शन होता है, तो liblib2.aउस फ़ंक्शन को कॉल liblib1.aकिया जाता है, जिसे प्रोग्राम में नहीं लाया गया है, तो लिंक एक अनसुलझे प्रतीक के साथ विफल हो जाएगा। साझा पुस्तकालयों के साथ, यह कोई समस्या नहीं है।

सामान्य तौर पर, जैसा कि अन्य ने कहा, विकल्पों के क्रम में अंतर हो सकता है या नहीं। हालांकि, नीचे दिए गए दो आदेशों से आउटपुट भिन्न हैं - इसलिए catआउटपुट को बदलने के लिए तर्कों का क्रम :

cat /etc/passwd /etc/group
cat /etc/group  /etc/passwd

यह भी ध्यान दें कि लिनक्स पर (विशेष रूप से), GNU getopt()कमांड लाइन को पुनः व्यवस्थित करने के लिए उपयुक्त है ताकि किसी भी अन्य तर्क से पहले सभी विकल्प (माइनस के साथ शुरू) संसाधित हो जाएं - जब तक कि आप डबल-डैश --का उपयोग करने के अंत को चिह्नित करने के लिए उपयोग न करें तर्क, या जब तक आप पर्यावरण चर POSIXLY_CORRECT सेट नहीं करते हैं।


4

केवल अगर आपके पास 2 विकल्प हैं जो पारस्परिक रूप से अनन्य हैं। अन्यथा, आदेश कोई फर्क नहीं पड़ता।

बेशक, यह इस बात के आधार पर भिन्न हो सकता है कि प्रोग्राम कैसे लिखा गया है, लेकिन सभी सामान्य * निक्स टूल पर लागू होना चाहिए।


3

यह जानना मुश्किल है, जैसा कि अन्य पहले ही आपको बता चुके हैं कि इससे फर्क पड़ सकता है (या नहीं)।

अंगूठे का एक अच्छा नियम है मैन पेज को खोलना और पहले उदाहरण को देखना और उस आर्ग को वहां डालते समय उस आदेश का उपयोग करना।

तो अगर हम बिल्ली कमांड (आदमी बिल्ली) को देखें:

SYNOPSIS
       cat [OPTION] [FILE]...

ऐसा लगता है जब तक कि फ़ाइल के ठीक होने से पहले सभी विकल्प ठीक नहीं हो जाते।

और अगर हम gcc जानवर को देखें (आदमी gcc):

SYNOPSIS
       gcc [-c|-S|-E] [-std=standard]
           [-g] [-pg] [-Olevel]
           [-Wwarn...] [-pedantic]
           [-Idir...] [-Ldir...]
           [-Dmacro[=defn]...] [-Umacro]
           [-foption...] [-mmachine-option...]
           [-o outfile] [@file] infile...

       Only the most useful options are listed here; see below for the remainder.  g++ accepts mostly
       the same options as gcc.

यह बिल्ली आदेश के रूप में समझने के लिए आसान नहीं है :)

लेकिन अगर आप इसे सुरक्षित रूप से खेलना चाहते हैं, तो -c पहले लगता है -O और उसके बाद infile (hello.c) अंतिम लगता है।

gcc -c -O hello.c

लेकिन जैसा कि आप पहले से ही जानते हैं, क्योंकि अन्य लोग काम करते हैं ... यह इसे बहुत सुरक्षित खेल रहा है :)


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