Я пытаюсь выполнить приложения в c по имени, перед запуском я хочу узнать, является ли имя законным. Есть ли способ проверить c и узнать, существует ли приложение в среде PATH?
спасибо
Я пытаюсь выполнить приложения в c по имени, перед запуском я хочу узнать, является ли имя законным. Есть ли способ проверить c и узнать, существует ли приложение в среде PATH?
спасибо
Вероятно, лучший способ сделать это — имитировать поведение команды «what», как уже предложили Lunar Mushrooms.
Быстрый просмотр вывода следующей команды
$ strace which ls
показывает, что 'what' просто перебирает записи $PATH, объединяет их с именем команды ('ls' в приведенном выше примере) и вызывает для нее stat64. Цикл прерывается, если stat64 возвращает значение, отличное от -1 (это означает, что файл существует). Вот соответствующий фрагмент вывода проверенной команды:
...
stat64("/home/mz/bin/ls", 0xbfa84350) = -1 ENOENT (No such file or directory)
stat64("/usr/local/sbin/ls", 0xbfa84350) = -1 ENOENT (No such file or directory)
stat64("/usr/local/bin/ls", 0xbfa84350) = -1 ENOENT (No such file or directory)
stat64("/usr/sbin/ls", 0xbfa84350) = -1 ENOENT (No such file or directory)
stat64("/usr/bin/ls", 0xbfa84350) = -1 ENOENT (No such file or directory)
stat64("/sbin/ls", 0xbfa84350) = -1 ENOENT (No such file or directory)
stat64("/bin/ls", {st_mode=S_IFREG|0755, st_size=96324, ...}) = 0
stat64("/bin/ls", {st_mode=S_IFREG|0755, st_size=96324, ...}) = 0
geteuid32() = 1000
getgid32() = 1000
...
PATH
для поиска исполняемых файлов. - person David Heffernan   schedule 21.05.2012