У меня есть файл в $ HOME / bin (перед тем, как вы спросите, да, он находится в моем пути), test
который, как я подтвердил, может нормально выполняться, когда я запускаю его с полным путем к файлу. Тем не менее, я получаю действительно странную проблему, когда не запускаю ее таким образом. Когда я просто запускаю test
в терминале, он ничего не делает и сразу возвращается. Я знаю, что это не проблема поиска файла по нескольким причинам:
Там нет сообщения об ошибке. Обычно, если файл не может быть найден или не может быть выполнен, будет напечатано сообщение о том, что это так.
Запуск по-
which test
прежнему возвращает правильный путь к файлу.Вероятно, самый странный из всех - сценарий прекрасно работает при запуске
strace
. Я попытался использовать,strace
чтобы увидеть, смогу ли я выяснить, что происходит, но когда я запустил егоstrace
, это сработало, как и ожидалось, с 0 проблемами.
источник
type
, нетwhich
. См. Почему бы не использовать «который»? Что использовать тогда?Ответы:
test
это неудачное имя, это стандартная утилита для условных тестов . (Это на самом деле та же команда, что и[
вif [ ... ]
, она просто выглядит как синтаксическая вещь, но на самом деле это просто обычная команда.)test
Он также встроен, например, в Bash, поэтому запускtest
никогда не ищет ваш двоичный файл с пути.test
без аргументов просто возвращает 1 (false).Для запуска
strace test
не требуется встроенная оболочка, поскольку онаstrace
сама не реализует никаких утилит. Он просто использует то, что находит в вашемPATH
. Обратите внимание, что у вас, вероятно, есть стандартtest
в/bin/test
или/usr/bin/test
, так что если это будет первымPATH
,strace
запустите запустить.На моем Bash
which
также есть внешняя команда, поэтому она не имеет представления о встроенных функциях. С другой стороны, команда является встроенной в оболочку, и покажет , что .type
type test
test is a shell builtin
Смотрите также: почему бы не использовать "который"? Что использовать тогда?
источник