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

/usr/bin/find /

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

Идеи?

Спасибо

1 ответ1

0

Это очень странное поведение, и я никогда не сталкивался с чем-то подобным при использовании 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 не попадало огромное количество информации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .