Это очень странное поведение, и я никогда не сталкивался с чем-то подобным при использовании Cygwin. У меня недостаточно очков репутации, чтобы запрашивать информацию с помощью комментариев, поэтому я просто опубликую методы отладки, которые я бы использовал. Надеюсь, они пригодятся всем, у кого есть подобные проблемы.
Во-первых, я бы попытался проверить, что я запускаю правильный исполняемый файл. Запуск find --version
должен вернуть что-то вроде следующего:
find (GNU findutils) 4.5.11
Упаковано Cygwin (4.5.11-1)
Если бы я до сих пор не получил никакого вывода, я бы (установил и) использовал команду strace
Cygwin:
mkdir testdir
strace -o find.out find testdir
rmdir testdir
strace
позволяет увидеть, что вызывает исполняемый файл Cygwin к библиотеке Cygwin DLL. С помощью приведенной выше команды выходные данные команды find сохраняются в find.out
.
Если вы не знакомы с системным программированием Windows, многое из этого не имеет смысла. Однако просмотр выходных данных по-прежнему дает представление о том, что делает команда, например, фиксируется переменная Cygwin PATH и другие переменные среды, передаваемые команде. Я обычно ищу open(
чтобы посмотреть, какие файлы пытается использовать команда (find)). Успешные вызовы открытой функции будут отображаться как:
open: open(/home/anthony/t, 0x30C000)
open: open(., 0x400000)
Неудачные вызовы open возвращают значение -1. Обратите внимание, что не все файлы, которые находят попытки открыть файлы, действительно необходимы для правильной работы команды.
Это пример одной такой неудачной попытки (информация в locale.alias
была бы прочитана, если бы она существовала, но это не обязательно для find, чтобы выполнить свою работу):
open: -1 = open(/usr/local/share/locale/locale.alias, 0x8000), errno 2
Примечание. Я создаю (а затем удаляю ) пустой каталог testdir
чтобы в выходной файл strace не попадало огромное количество информации.