Виконаний файл з назвою 'test' знаходиться в $ PATH, але не запускається


13

У мене є файл у $ HOME / bin (перш ніж ви запитаєте, так, це на моєму шляху), testякий, як я підтвердив, може бути добре виконаний, коли я запускаю його з повним шляхом до файлу. Однак у мене виникає справді дивна проблема, коли я не запускаю це таким чином. Коли я просто біжу testв термінал, він нічого не робить і повертається негайно. Я знаю, що це не проблема пошуку файлу з кількох причин:

  1. Немає повідомлення про помилку Зазвичай, якщо файл неможливо знайти або неможливо виконати, повідомлення буде роздруковане так.

  2. Запуск which testвсе ще повертає правильний шлях до файлу.

  3. Мабуть, найдивовижніший з усіх - сценарій прекрасно працює при проходженні strace. Я спробував використати, straceщоб зрозуміти, чи можу я зрозуміти, що відбувається, але коли я запустив це strace, він працював так, як очікувалося, з 0 питаннями.



Відповіді:


45

testце невдале ім’я для використання, це стандартна утиліта для умовних тестів . (Це фактично та ж команда , як [в системі if [ ... ], він просто виглядає як синтаксична річ, але насправді просто нормальна команда.)

testтакож вбудований, наприклад, Bash, тому біг просто 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 (false).

Запуск strace testне включає вбудовану оболонку, оскільки straceне реалізує жодних утиліт. Він просто використовує те, що знайде у вашому PATH. Зауважте, що у вас, ймовірно, є стандарт testв, /bin/testабо /usr/bin/test, якщо це було б першим PATH, straceзапустіть це.

На моєму Bash whichтакож є зовнішня команда, тому вона також не має уявлення про вбудовані файли. З іншого боку, команда є вбудованої в оболонку, і покаже , що .typetype testtest is a shell builtin

Дивіться також: Чому б не використовувати "який"? Що тоді використовувати?


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.