Cygwin "find" ничего не возвращает

Cygwin "find" ничего не возвращает

Эта команда ничего не возвращает в Cygwin, работающем на Windows Server 2008 r2:

/usr/bin/найти/

Я получаю небольшую паузу, но текст не возвращается. Никаких ошибок, никаких результатов и т. д. Я пробовал разные пути поиска, используя аргументы (например, -type f), и задавал свой путь cygwin просто как /usr/local/bin:/usr/bin. Ничего не работает.

Идеи?

Спасибо

решение1

Это очень странное поведение, и я никогда не сталкивался ни с чем подобным при использовании Cygwin. У меня недостаточно очков репутации, чтобы запрашивать информацию в комментариях, поэтому я просто опубликую методы отладки, которые я бы использовал. Надеюсь, они будут полезны всем, у кого есть похожие проблемы.

Во-первых, я бы попытался проверить, что я запускаю правильный исполняемый файл. Запуск find --versionдолжен вернуть что-то вроде следующего:

найти (GNU findutils) 4.5.11

Упаковано Cygwin (4.5.11-1)

Если бы я все еще не получал никаких результатов, я бы (установил и) использовал команду Cygwin strace :

mkdir testdir
strace -o find.out find testdir
rmdir testdir

straceпозволяет вам увидеть, какие вызовы исполняемый файл Cygwin делает в Cygwin DLL. С помощью указанной выше команды вывод команды find сохраняется в find.out.

Если вы не знакомы с системным программированием Windows, многое из этого не будет иметь смысла. Однако просмотр вывода все равно даст вам представление о том, что делает команда, например, фиксируются переменные окружения Cygwin PATH и другие переменные среды, передаваемые команде. Я обычно ищу, open( чтобы увидеть, какие файлы пытается использовать команда (find). Успешные вызовы функции open будут отображаться следующим образом:

open: open(/home/anthony/t, 0x30C000)
open: open(., 0x400000)

Неудачные вызовы open возвращают значение -1. ​​Обратите внимание, что не все файлы, которые find пытается открыть, на самом деле требуются для корректной работы команды. Это пример одной из таких неудачных попыток (информация в locale.alias была бы прочитана, если бы она существовала, но она не нужна find для выполнения своей работы):

open: -1 = open(/usr/local/share/locale/locale.alias, 0x8000), errno 2

Примечание: я создаю (а затем удаляю) пустой testdirкаталог, чтобы в выходной файл strace не попадал слишком большой объем информации.

Связанный контент