कमांड लाइन के मापदंडों में "-" (एक डैश) का जादू क्या है?


101

उदाहरण:

  • आईएसओ छवि बनाएं और इसे सीधे सीडी में जलाएं।

    mkisofs -V Photos -r /home/vivek/photos | cdrecord -v dev=/dev/dvdrw -

  • पिछली निर्देशिका में बदलें।

    cd -

  • पोर्ट 12345 और इसे भेजे गए अनटार डेटा को सुनें।

    nc -l -p 12345 | tar xvzf -

डैश का उद्देश्य क्या है और मैं इसका उपयोग कैसे करूं?

जवाबों:


111

यदि आप कमांड -के अंत में नग्न हैं tar, तो यह कई कमांड पर आम है जो फ़ाइल का उपयोग करना चाहते हैं।

यह आपको वास्तविक फ़ाइल नाम के बजाय मानक इनपुट या आउटपुट निर्दिष्ट करने की अनुमति देता है ।

यह आपके पहले और तीसरे उदाहरण के लिए मामला है। उदाहरण के लिए, cdrecordकमांड मानक इनपुट ले रहा है (आईएसओ इमेज स्ट्रीम द्वारा निर्मित mkisofs) और इसे सीधे लिख रहा है /dev/dvdrw

cdकमांड के साथ , हर बार जब आप निर्देशिका बदलते हैं, तो यह उस निर्देशिका को संग्रहीत करता है जो आप से आए थे। यदि आप cdविशेष -"निर्देशिका नाम" के साथ करते हैं, तो यह वास्तविक के बजाय उस याद की गई निर्देशिका का उपयोग करता है। आप बहुत आसानी से दो निर्देशिकाओं के बीच स्विच कर सकते हैं।

अन्य आदेश -एक अलग विशेष मान के रूप में मान सकते हैं।


9
ध्यान दें कि आप -git शाखाओं के लिए भी उपयोग कर सकते हैं , यानी आप अपनी पिछली शाखा में वापस आ सकते हैंgit checkout -
snappieT

3
जहां टार डॉक्स में यह समझाता है कि यह समर्थित है? मुझे कैसे पता चलेगा कि कौन सी कमांड इसका समर्थन करती है?

1
यदि किसी कमांड का विशेष अर्थ है -, तो आप मैन पेज में इसकी व्याख्या पा सकते हैं।
कोडवर्ड

su - # शेल को एक लॉगिन शेल
atongsa

मुझे इस तरह की बहुत उत्सुकता से एक कमांड मिलती है: tar -cvf - / home | aescrypt -e -p सेब -> backup_files.tar.aes जो वास्तव में टैर है -cvf - / होम | aescrypt -e -p apples -o backup_files.tar.aes - क्योंकि पाइपिंग चार | अंतिम डैश की उपस्थिति को अनावश्यक बनाना चाहिए। लेकिन अंतिम डैश के बिना कमांड विफल रहता है। अतार्किक लगता है। क्या कोई मुझे एक संदर्भ दे सकता है जहां कमांड लाइनों में नग्न डैश अर्थ समझाया गया है। मुझे कोई नहीं मिल रहा है।
एल्मक्लोज़

22

यह जादू नहीं है। कुछ कमांड व्याख्या -करते हैं कि उपयोगकर्ता स्टड से पढ़ना चाहता है या स्टडआउट को लिखना चाहता है; शेल के लिए इसके बारे में कुछ खास नहीं है।


9
के मामले में छोड़कर cd -; bash(1)संभालता है cd -जैसे कि आपने लिखा था cd $OLDPWD
snold

6
@sarnold लेकिन बिंदु एक ही है, cd- एक शेल निर्मित कमांड - एक डैश की ही व्याख्या करता है। कोई "जादू" :-)

2
@pst, यकीन है, कोई जादू नहीं (यह सब सिर्फ कोड है :), लेकिन शेल के बारे में कुछ खास है।
snold

13

से या करने के लिए पुनर्निर्देशन stdinया stdout

देखें: http://tldp.org/LDP/abs/html/special-chars.html#DASHREF2


हमेशा की तरह, ABS को नमक के दाने के साथ लेना होगा। उदाहरण के लिए, इसका अर्थ है वहाँ पुनर्निर्देशन यहाँ है कि है, लेकिन इस खोल के पुनर्निर्देशन ऑपरेटरों (से अलग है <, >, |, आदि)।
ट्रिपलए

10

-इसका मतलब बिल्कुल वही है जो प्रत्येक कमांड इसका मतलब चाहता है। कई सामान्य सम्मेलन हैं, और आपने उनमें से अधिकांश के उदाहरण अन्य उत्तरों में देखे हैं, लेकिन उनमें से कोई भी 100% सार्वभौमिक नहीं है।

-जहां तक ​​शेल का संबंध है , चरित्र के बारे में कुछ भी जादू नहीं है (सिवाय इसके कि शेल ही, और इसके कुछ अंतर्निहित कमांड जैसे cdऔर echo, पारंपरिक तरीकों से इसका उपयोग करें)। कुछ वर्ण, जैसे \, ', और ", कर रहे हैं "जादुई", विशेष अर्थ होने चाहे वे कहीं भी दिखाई देते हैं। ये "शेल मेटाक्रैक्टर" हैं। -ऐसा नहीं है।

यह देखने के लिए कि किसी दिए गए कमांड का उपयोग कैसे किया जाता है -, उस कमांड के लिए प्रलेखन पढ़ें


7

अधिवेशन में जादू होता है। सहस्राब्दियों के लिए, लोगों ने '-' का उपयोग तर्कों से विकल्पों को अलग करने के लिए किया है, और '' - '' का प्रयोग उचित या तो स्टड या स्टडआउट करने के लिए किया है। अधिवेशन की शक्ति को कम मत समझो!


शाब्दिक भावों से वाणी के शिष्टाचार को समझने की लोगों की क्षमता को कम मत समझिए। सहस्राब्दियों से ऐसा नहीं चल रहा है।
19

1
@tripleee - सच है, लेकिन यह अरबों सेकंड के लिए चल रहा है। ;-)
डेविड आर ट्रिबेल

5

इसका अर्थ है प्रोग्राम के मानक इनपुट स्ट्रीम का उपयोग करना।

के मामले में cd, इसका मतलब कुछ अलग है: पूर्व कार्यशील निर्देशिका में परिवर्तन।

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