5

Я использую следующую команду на компьютере Mac OS X:

cp "/Users/username/Desktop/silverlock-dev/silverlock/../3rdparty/botan-build-desktop/src/libBotan*" "/Users/username/Desktop/silverlock-dev/silverlock-build-desktop/silverlocklib/../bin"

Однако я получаю:

cp: /Users/username/Desktop/silverlock-dev/silverlock/../3rdparty/botan-build-desktop/src/libBotan*: No such file or directory

В этом каталоге явно 4 файла:

libBotan.1.0.0.dylib
libBotan.1.0.dylib (symlink to first file)
libBotan.1.dylib (symlink to first file)
libBotan.dylib (symlink to first file)

Если я напишу полное имя файла в команде копирования, он будет работать нормально, но мне нужно иметь возможность использовать подстановочный знак как часть процесса сборки. Логика и разум говорят мне, что это должно работать без проблем. Я что-то упустил?

2 ответа2

10

Когда вы помещаете * в кавычки, он ожидает, что это будет буквальное имя файла, а не расширение соответствия всем. Просто возьмите цитаты, и это будет работать. Кроме того, проверьте superuser.com, где такие вопросы идут.

1

Когда оболочка расширяет символы подстановки в командной строке, она сначала разделяется на пробелы, а затем расширяет символы подстановки. Расширенные имена файлов (которые могут содержать пробелы) передаются в качестве полного аргумента команде (cp).

Обратите внимание, что команда (в данном случае cp ) никогда не видит кавычки, которые вы используете в командной строке оболочки, и не разделяет свои собственные аргументы на пробелы. Он получает список строк без кавычек, каждая из которых может содержать пробелы.

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