क्यों pwd --physical जैसे लंबे विकल्पों को स्वीकार नहीं करता है?


11

जब मैं pwdकमांड के लिए मैनुअल प्रदर्शित करता हूं , तो यह कहता है कि लंबे विकल्प --physicalसमर्थित हैं

$ man pwd
PWD(1)                           User Commands                          PWD(1)

NAME
       pwd - print name of current/working directory

SYNOPSIS
       pwd [OPTION]...

DESCRIPTION
       Print the full filename of the current working directory.

       -L, --logical
              use PWD from environment, even if it contains symlinks

       -P, --physical
              avoid all symlinks

हालाँकि, यह विफल रहता है जब मैं निम्न टाइप करता हूं

$ pwd --physical
-bash: pwd: --: invalid option
pwd: usage: pwd [-LP]

मेरे लिए लंबे विकल्प काम क्यों नहीं कर रहे हैं?

मैं आरएचईएल 6.4 का उपयोग कर रहा हूं। Pwd के लिए कोई अन्य नाम कॉन्फ़िगर नहीं किया गया है। ऐसा लगता है कि यह मानक pwd है:

$ which pwd
/bin/pwd

1
मैनुअल पेज एक स्टैंडअलोन उपयोगिता के लिए है जो बैश का हिस्सा नहीं है।
थॉमस डिकी

7
typeइसके बजाय का उपयोग करें which, चूंकि whichकेवल कमांड दिखाता है, जबकि typeकीवर्ड, बिल्डिंस, उपनाम, फ़ंक्शन और कमांड (और हैशेड कमांड पथ) दिखाता है। अधिक जानकारी के लिए "क्यों" का उपयोग न करें? तब क्या उपयोग करें?
वंदारेरी

1
मेरे सिस्टम man pwdमें निम्नलिखित नोट है: अनुभाग your shell may have its own version of pwd, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supportsके नीचे DESCRIPTION
Nyakakin

जवाबों:


26

bashएक अंतर्निहित कमांड है pwdजो कि आप तब उपयोग कर रहे हैं जब आप बस pwdअपने शेल में टाइप करते हैं।

pwdमैनपेज द्वारा बताए अनुसार पाने के लिए , आपको बाहरी कमांड के बल प्रयोग की आवश्यकता है। आप इसे निष्पादन योग्य ( /bin/pwdआपके मामले में) के लिए पूरा रास्ता निर्दिष्ट करके या envलाइन से पहले prepending द्वारा कर सकते हैं :, env pwdजो उस envकमांड को शुरू करता है जिसका उपयोग वातावरण में सेटिंग्स जोड़ने के लिए किया जा सकता है (लेकिन जो यहां नहीं किया गया है) और फिर envशुरू होता है कमांड निर्दिष्ट है। जैसा कि envएक अंतर्निहित नहीं है pwd, "वास्तविक" /bin/pwdनिष्पादित होता है।

pwdबैश में बिलिन का लाभ यह है कि bashवर्तमान निर्देशिका का ट्रैक रखता है, इसलिए मूल्य प्राप्त करना शून्य लागत पर है, जबकि बाहरी कमांड को पथ निर्धारित करने के लिए फाइल सिस्टम के माध्यम से खोज करने की आवश्यकता है, जो कि अधिक गहन IO है।


4
यह नहीं है कि बाहरी कमान वास्तव में कैसे काम करती है। unix.stackexchange.com/a/413225/5132
JdeBP

BTW: आप शेल बेसिन (कम से कम बाश में) को निष्क्रिय भी कर सकते हैंenable -n pwd
derobert

@JdeBP यह पिछली बार जब मैं देखा था (एक लंबे समय से पहले :-)) हुआ करता था; और जब यह अब getcwd()सिस्टम कॉल का उपयोग करता है , तो कर्नेल अभी भी फाइलसिस्टम का पता लगाता है, जो कि संबंधित डेटा संरचनाओं तक पहुंच के कारण कर्नेल स्थान में करना आसान है, जैसा कि जुड़ा हुआ उत्तर बताता है: "हालांकि, ध्यान दें कि फ्रीबीएसडी और उन ऑपरेटिंग पर भी सिस्टम कर्नेल एक स्ट्रिंग के साथ कार्यशील निर्देशिका का ट्रैक नहीं रखता है। "
wurtel

11

वह मैनपेज दस्तावेज़ /bin/pwd, लेकिन जब आप चलाते हैं pwdतो आप शेल निर्मित में उपयोग कर रहे होते हैं; का आउटपुट देखें

type pwd

आपके शेल का अंतर्निहित pwdलंबे विकल्पों का समर्थन नहीं करता है (अपने शेल के दस्तावेज़ देखें; चूंकि आप बैश का उपयोग कर रहे हैं, help pwdएक सारांश प्रदान करेगा)।

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