найти команду в cygwin, указав неверный формат параметра


14

Я использую Cygwin в моей машине Windows. Я пытаюсь найти, и он дает неправильный формат параметра. Это почему?

$ ls
bootstrap.jar
catalina-tasks.xml
catalina.bat
catalina.sh
commons-daemon-native.tar.gz
commons-daemon.jar
cpappend.bat
digest.bat
digest.sh
setclasspath.bat
setclasspath.sh
shutdown.bat
shutdown.sh
startup.bat
startup.sh
tomcat-juli.jar
tomcat-native.tar.gz
tool-wrapper.bat
tool-wrapper.sh
version.bat
version.sh

$ find . -name "version.sh"
FIND: Parameter format not correct
  • Должен ли я установить что-либо во время установки Cygwin или я делаю что-то не так?
find  cygwin 

Ответы:


19

Ты PATHплохой Он имеет системные каталоги Windows перед каталогами Cygwin, или, возможно, не имеет каталогов Cygwin вообще. Это сообщение поступает от команды Windows find(что оно сообщает свое имя, так как FINDзаглавная является подсказкой).

Когда вы запускаете оболочку Cygwin, вам обычно нужно установить PATH. Я рекомендую вам запустить оболочку входа (если я правильно помню, именно так поступают записи системного меню Cygwin по умолчанию). Ваш Cygwin PATHдолжен иметь /usr/local/bin, /usr/binи /bin(по крайней мере) перед любой директории без Cygwin.


1
Да, это, вероятно, все. Эта ошибка вызвана тем, что использованная вами команда поиска - это команда поиска Windows, а не Cygwin.
Яник Жируард

Или наберите /usr/bin/findвместоfind

Я был /usr/binв пути, я предполагаю , что оболочка использует первый findНайденный в $ PATH, которая является системой один. Я собирался удалить его (потому что он мне все равно не нужен) , но я предполагаю, что некоторые случайные системные скрипты могут ожидать именно этого find. Таким образом, фиксируя это правильный путь, чтобы написать псевдоним alias find="/usr/bin/find"в ~/.bashrc (или любой другой оболочки вы используете) .
Привет, Ангел,

1

Установлен ли find? Что возвращает "который находит"? Помните, что в Windows есть встроенная командная строка для поиска, которую Cygwin в конечном итоге использует, если его собственная находка - mia.


1

Ответ от Жиля верен в том, что версия команды для Windows findпредшествует версии cygwin, и поэтому она вызывается.

Однако, если вы опередите Cygwin, это будет означать, что любые командные файлы, использующие команду windows find, теперь на самом деле будут вызывать команду cygwin find, что может не соответствовать вашим ожиданиям.

На мой взгляд, самый симбиотический способ работы обоих заключается в следующем:

  1. Найдите команду cygwin findи переименуйте / скопируйте ее lfind.exe(или любое другое имя, которое отсутствует в PATH Windows)
  2. В вашем ~/.bashrcфайле добавьте строкуalias find=lfind

Таким образом, при запуске findиз терминала cygwin вы будете использовать версию cygwin, но командные файлы будут использовать версию windows.

Примечание: вам все еще понадобится каталог cygwin bin в вашей переменной PATH, но теперь он может быть дальше от системного каталога Windows.


0

Когда вы устанавливаете Cygwin, он не устанавливает все возможные пакеты, если вы не попросите об этом. Для того, чтобы добавить желаемый пакет, посмотрите объяснение здесь на Super User.

Или просто выполните следующие действия:

  1. Запустите программу установки, выберите зеркало и перейдите на экран пакетов
  2. Выберите «Сохранить» из списка переключателей вверху
  3. Выберите нужный пакет под соответствующей группой
  4. Выберите «Продолжить»

0

Вот GNU-утилиты как родные порты win32 . Им не нужен Cygwin для запуска, и они поставляются с оболочкой (sh.exe), включая grep, sed, awk, find, less, cat, tac и многие другие.

Проблема с путем Windows будет сохраняться, но, возможно, вы переименуете find в gfind(gnu-find) или в search, чтобы сделать его более доступным, и добавите coreutils dir в вашу PATH.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.