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