क्या `-` का उपयोग केवल सीडी के साथ किया जाता है?


45

cd - वर्तमान dir और पिछले dir के बीच स्विच कर सकते हैं।

ऐसा लगता है कि मैंने -पहले अन्य आदेशों के लिए तर्कों के रूप में उपयोग किया है, हालांकि मुझे याद नहीं है कि क्या -इसका मतलब उसी के साथ है cd

मैंने पाया कि -साथ काम नहीं करता है ls

है - केवल सीडी के साथ प्रयोग किया?


8
कुछ ध्यान में रखना यह है कि cdएक बिल्डिन है, न कि एक बाहरी कमांड (और न ही यह एक के रूप में भी काम करने का कोई तरीका होगा)। cd -इस प्रकार एक शेल-स्तरीय विशेषता है।
फूली

6
मैं हर समय का उपयोग git checkout -पिछले शाखा करने के लिए स्विच करने के लिए
विम

@ फुलवारी: क्या -अन्य बिलिनों के साथ भी इसी तरह उपयोग किया जाता है?
टिम

डायरेक्टरी-हैंडलिंग बिल्डिंस जैसे कुछ के लिए pushd, हाँ। अन्यथा, "पिछली निर्देशिका" का अर्थ बहुत उपयोगी डिफ़ॉल्ट नहीं है।
शराबी

1
शायद आप बैश की '~ -' सुविधा के बारे में सोच रहे हैं (जिसकी व्याख्या $ OLDPWD के रूप में की गई है)। आपके द्वारा वर्णित तरीके से 'ls' के साथ प्रयोग किया जा सकता है।
abonet

जवाबों:


22

POSIX उपयोगिता वाक्य रचना के दिशा निर्देशों (विशेष रूप से # 13) उपयोगिताओं कि उम्मीद फ़ाइल नाम, आपके पढ़ने के लिए निर्दिष्ट करते हैं कि -साधन मानक इनपुट, और उपयोगिताओं कि, को लिखने के लिए एक फ़ाइल नाम की उम्मीद के लिए -साधन मानक आउटपुट। उदाहरण के लिए, अपने मानक आउटपुट cat somefile -की सामग्री की प्रतिलिपि बनाता है somefile, उसके बाद उसके मानक इनपुट पर जो कुछ भी पढ़ता है।

यह दिशानिर्देश cdकमांड पर लागू नहीं होता है क्योंकि यह किसी फ़ाइल को पढ़ने या लिखने के लिए नहीं है। cdकुछ अलग करता है: तर्क का -अर्थ है "पिछली निर्देशिका"। कमांड cd -के बराबर है cd "$OLDPWD" && pwd। यह व्यवहार cdकमांड के लिए विशिष्ट है , और सीधे कमांड जैसे प्रेरित करने के लिए pushd

ध्यान दें कि -एक ऑपरेंड है, एक विकल्प नहीं है। केवल तर्क जो शुरू होते हैं -और केवल -या --विकल्प नहीं हैं। एक ऑपरेंड होने का मुख्य निहितार्थ यह है कि --इसके विशेष अर्थ को प्रभावित नहीं करता है। उदाहरण के लिए, cd -- -Pएक उपनिर्देशिका में परिवर्तन को बुलाया जाता है -P, लेकिन cd -- -यह उसी तरह है cd -, जैसे यह एक निर्देशिका में परिवर्तित नहीं होता है -। इसी तरह, cat -- -एक फ़ाइल से नहीं पढ़ा जाता है जिसे -मानक इनपुट कहा जाता है ।


46

-POSIX उपयोगिता सिंटैक्स दिशानिर्देशों में मानक इनपुट के रूप में परिभाषित किया गया है :

Guideline 13:
For utilities that use operands to represent files to be opened for either 
reading or writing, the '-' operand should be used to mean only standard input 
(or standard output when it is clear from context that an output file is being 
specified) or a file named -.

आप इस परिभाषा को उपयोगिताओं के लिए देख सकते हैं जो पढ़ने या लिखने के लिए फाइलों के साथ काम करती हैं। cdइन उपयोगिताओं से संबंधित नहीं है, इसलिए -सीडी में इस दिशानिर्देश का पालन नहीं किया जाता है।

इसके अलावा, POSIX को भी cd के- साथ परिभाषित किया गया है :

-
    When a <hyphen> is used as the operand, this shall be equivalent to the 
    command:

    cd "$OLDPWD" && pwd

    which changes to the previous working directory and then writes its name.

36

cd -के लिए वास्तव में आशुलिपि है cd "$OLDPWD" && pwd, जहां $OLDPWDहर बार जब आप निर्देशिका को निर्देशिका में बदलते हैं, तो आप सेट होते हैं।

-आवेदन पर निर्भर करता है की हैंडलिंग । कुछ एप्लिकेशन -संकेत देने के लिए उपयोग करते हैं STDIN, जैसे grep,awk

अन्य अनुप्रयोगों का उपयोग कर सकते -, कुछ भी करने के लिए एक आशुलिपि वे चुनते हैं, माइकल के जवाब निर्दिष्ट के रूप में के रूप में के साथ su, -के लिए आशुलिपि है--login


हाँ, वास्तव में इसके लिए कोई नियम नहीं है।
कीवी

2
@ कीवी: पोसिक्स के साथ, इसके लिए एक नियम है, मेरा उत्तर देखें।
cuonglm

सटीक होने के लिए, एक सामान्य नियम है, लेकिन इसके कई अपवाद हैं। ऐसे बहुत सारे आदेश हैं जो नियम से पहले होते हैं, या पुराने कार्यान्वयन जिन्हें नियम के अनुरूप अद्यतन नहीं किया गया है।
बरमार

19

हालांकि माइकल का उल्लेख है कि suऔर अन्य अनुप्रयोगों का उपयोग -वे जो कुछ भी चाहते हैं उसका मतलब करने के लिए उपयोग कर सकते हैं (स्टड से पढ़ा जाना आम है), गीट -उसी तरह से उपयोग करता है जोcd शाखाओं को बदलने के लिए करता है

$ git status
On branch master

$ git checkout foobar
$ git status
On branch foobar

$ git checkout -
$ git status
On branch master

18

कोई भी कार्यक्रम -एक तर्क के रूप में उपयोग कर सकता है, जिसका अर्थ है कि वे जो चाहते हैं। एक सामान्य उदाहरण है su, जो -शॉर्टहैंड के रूप में उपयोग करता है --login। केवल एक ही सम्मेलन मैं सोच सकता हूँ कि प्रोग्राम जो फ़ाइलों से पढ़ते हैं वे अक्सर "स्टडिन से पढ़ें"- का अर्थ करते हैं , लेकिन यह पूरी तरह से कार्यक्रम के लिए है


क्या तर्कों के रूप में विशेष प्रतीकों का उपयोग करने के लिए मानक या गैरमानक सम्मेलन हैं?
टिम

2

यहाँ मेरे दो सेंट जोड़ना। मैं '-' का उपयोग ps2pdf टूल को मानक इनपुट से पढ़ने के लिए बताने के लिए करता हूं, जैसा कि कई लोगों ने पहले सुझाया है:

man -t ls | ps2pdf - ls.pdf

उपरोक्त एक-लाइनर वर्तमान निर्देशिका में ls के लिए मैन पेज का एक पीडीएफ संस्करण बनाता है ।
आशा है कि किसी को यह उपयोगी लगता है :)।


2

जैसा कि gnouc द्वारा उत्तर दिया गया है , -का अपना अर्थ है cd

हालाँकि, आप -अन्य प्रोग्राम के उपयोग से व्यवहार को दोहरा सकते हैं ~-। उदाहरण के लिए:

cd /etc
cd /
ls ~-             #lists the contents of the /etc directory
vim ~-/fstab      #opens the file /etc/fstab in vim
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.