अपने पूर्ण पथ का उपयोग किए बिना टर्मिनल से एक विशेष कार्यक्रम नहीं चला सकते


9

मैं ds9टर्मिनल से एक कार्यक्रम चलाना चाहता हूं । कार्यक्रम स्पष्ट रूप से पथ में है, जिसे मैंने चलाकर निर्धारित किया है:

which ds9
/Users/evgenii/miniconda3/envs/iraf/bin/ds9

लेकिन जब मैं टाइप करके कमांड चलाता हूं ds9, तो यह मुझे निम्न त्रुटि दिखाता है:

-bash: /Applications/ds9.app/Contents/MacOS/ds9: No such file or directory

मैं अभी भी इसे ठीक से निष्पादित कर सकता हूं यदि मैं पूर्ण पथ का उपयोग इस प्रकार करता हूं:

/Users/evgenii/miniconda3/envs/iraf/bin/ds9

क्या चल रहा है? इसे चलाने की कोशिश क्यों की जा रही है /Applications/ds9.app?

अनुमतियाँ इस प्रकार हैं:

-rwxrwxr-x@ 1 evgenii  staff  18613852  9 Nov 20:13 /Users/evgenii/miniconda3/envs/iraf/bin/ds9

अपडेट करें:

यहाँ type -a ds9कमांड चलाने का आउटपुट है :

type -a ds9
ds9 is aliased to `/Applications/ds9.app/Contents/MacOS/ds9 -xpa no'
ds9 is /Users/evgenii/miniconda3/envs/iraf/bin/ds9

4
उपयोग न करें which। यह एक बाहरी कार्यक्रम है, इसलिए यह शेल उपनामों के बारे में नहीं बता सकता।
बरमार

आदेशों के साथ काम करने के लिए प्राप्त करें: PATHबजाय aliasऔर typeइसके बजाय का उपयोग करें which
दान

जवाबों:


19

आदेश स्पष्ट रूप से टूटे हुए उर्फ ​​के लिए है। सबसे पहले, के लिए सभी मैचों के लिए जांच ds9में PATHवातावरण चर, निम्न आदेश को क्रियान्वित करते हुए:

type -a ds9

आपके अपडेट किए गए प्रश्न के अनुसार, यह type -a ds9कमांड के आउटपुट से स्पष्ट है , कि एक उपनाम वास्तविक कमांड को छायांकित कर रहा है।

उपनाम को अनदेखा करके वास्तविक कमांड को निष्पादित करने के लिए, और पूर्ण पथ को निर्दिष्ट किए बिना, कमांड से पहले एक \(बैकस्लैश) चरित्र को प्रस्तुत करना। यह किसी भी बैश परिभाषित उपनाम की उपेक्षा करता है।

यदि आप हर बार कमांड से पहले बैकस्लैश को प्रस्तुत करने की इच्छा नहीं रखते हैं, तो यह पता लगाएं कि उपनाम कहां बनाया जा रहा है, और या तो इसे हटा दें, या वास्तविक आदेश के साथ उपनाम को ओवरराइड करें।


1
ds9उर्फ परिभाषा संभवत में है ~/.bashrcऔर वहाँ से हटाया जाना चाहिए (क्योंकि यह एक बुरा विधि इस तरह की समस्या के लिए अग्रणी है)। grep ds9 ~/.bashrcइसकी पुष्टि करेगा।
दान

4

मैं देख रहा हूं कि यह पूछने वाले के लिए हल किया गया था, लेकिन भविष्य के पाठकों के लिए मैं यह उल्लेख करना चाहता हूं कि यह भी हो सकता है कि कमांड को हैश किया गया था और फिर फ़ाइल को हटा दिया गया था। ( help hashजानकारी के लिए देखें ।)

type -a commandnameआपको वह नहीं दिखाएगा, केवल type commandnameकरेगा।

इस मामले में, hash -d ds9सभी की जरूरत होगी।

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