'परीक्षण' नाम की निष्पादन योग्य फ़ाइल $ PATH में है, लेकिन नहीं चलेगी


13

मेरे पास $ HOME / बिन में एक फ़ाइल है (इससे पहले कि आप पूछें, हाँ, यह मेरे पथ में है) जिसे testमैंने पुष्टि की है कि जब मैं इसे फ़ाइल के लिए पूर्ण पथ के साथ चलाता हूं तो इसे ठीक से निष्पादित किया जा सकता है। हालाँकि, मुझे बहुत अजीब मुद्दा मिलता है जब मैं इसे इस तरह से नहीं चलाता। जब मैं testटर्मिनल में बस चलाता हूं , तो यह कुछ भी नहीं करता है और तुरंत लौटता है। मुझे पता है कि यह कई कारणों से फ़ाइल खोजने का मुद्दा नहीं है:

  1. कोई त्रुटि संदेश नहीं है। आम तौर पर यदि फ़ाइल नहीं मिल सकती है या निष्पादित नहीं की जा सकती है तो एक संदेश ऐसा कहते हुए प्रिंट किया जाएगा।

  2. रनिंग which testअभी भी सही फ़ाइल पथ देता है।

  3. शायद सबसे अजीब - स्क्रिप्ट ठीक काम करता है जब के माध्यम से चलाते हैं strace। मैंने straceयह देखने का उपयोग करने की कोशिश की कि क्या मैं समझ सकता हूं कि क्या चल रहा था, लेकिन जब मैंने इसे चलाया strace, तो यह 0 मुद्दों के साथ अपेक्षित था।


7
का उपयोग करें type, नहीं which। देखें कि "क्यों" का उपयोग न करें? तब क्या उपयोग करें?
wjandrea

जवाबों:


45

testउपयोग करने के लिए एक दुर्भाग्यपूर्ण नाम है, यह सशर्त परीक्षणों के लिए मानक उपयोगिता है । (यह वास्तव में के रूप में एक ही कमान है , यह सिर्फ एक वाक्य रचना की तरह दिखता है, लेकिन वास्तव में सिर्फ एक सामान्य आदेश है)[if [ ... ]

testयह भी बाश में बनाया गया है, तो बस चल testरहा है अपने बाइनरी रास्ते से नहीं लग रहा है।

bash$ help test | head
test: test [expr]
    Evaluate conditional expression.

    Exits with a status of 0 (true) or 1 (false) depending on
    the evaluation of EXPR.  Expressions may be unary or binary.  
    [...]

test बिना किसी तर्क के सिर्फ 1 (असत्य) रिटर्न देता है।

रनिंग strace testशेल बिल्डिन को शामिल नहीं करता है, क्योंकि straceकिसी भी उपयोगिताओं को स्वयं लागू नहीं करता है। यह सिर्फ वह उपयोग करता है जो यह आपके में पाता है PATH। ध्यान दें कि आपके पास संभवतः मानक testहै /bin/testया /usr/bin/testइसलिए, यदि वह पहले में होगा PATH, तो straceवह चलेगा।

मेरे बैश पर, whichएक बाहरी कमांड भी है, इसलिए इसमें बिल्डिंस के बारे में कोई विचार नहीं है। दूसरी ओर, आदेश खोल करने के लिए निर्मित है, और पता चलता है कि होगा ।typetype testtest is a shell builtin

यह भी देखें: "जो" का उपयोग क्यों न करें? तब क्या उपयोग करें?


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