Вопрос или проблема
Я выполнил команду pwd | pbcopy
в Терминале на своем MacBook Pro, чтобы скопировать рабочую директорию в буфер обмена. Рабочая директория выглядит так:
/Users/JohnSmith/PycharmProjects/100 Days of Code - The Complete Python Pro Bootcamp2/Day 2/Type Error, Checking and Conversion
Но когда я переключаюсь на другую, совершенно другую директорию, набираю cp
, а затем нажимаю CMD+V, чтобы вставить путь к первой директории, я получаю следующее сообщение об ошибке:
cp: Conversion is not a directory
Однако, когда я редактирую содержимое буфера обмена, добавляя косую черту “/”, я не получаю вышеупомянутое сообщение об ошибке. Но когда я затем добавляю имя файла, который хочу скопировать, так:
/Users/StephenLearmonth/PycharmProjects/100 Days of Code - The Complete Python Pro Bootcamp2/Day 2/Type Error, Checking and Conversion/task.py task-2.py
Я получаю это сообщение об ошибке:
cp: task-2.py is not a directory
Он копирует файл task.py
только тогда, когда я оборачиваю в двойные кавычки директории в скопированном пути к директории.
Это ошибка Unix или команды pwd | pbcopy
?
Кто-нибудь еще сталкивался с этой проблемой?
Ошибки нет. Это стандартное, ожидаемое поведение. Хотя вы, с вашим человеческим мозгом, можете понять, что 100 Days of Code - The Complete Python Pro Bootcamp2
— это одна директория, оболочка просто видит blah blah blah blah blah blah blah blah blah blah
. Она видит 10 слов, 10 строк, разделенных пробелами, и не имеет возможности знать, что это должно быть одно целое.
В основном, вам нужно сказать оболочке, чтобы она обрабатывала эту длинную строку с множеством слов как одну строку. Вы делаете это, заключая в кавычки:
cp "/Users/StephenLearmonth/PycharmProjects/100 Days of Code - The Complete Python Pro Bootcamp2/Day 2/Type Error, Checking and Conversion/task.py" task-2.py
Таким образом, вместо того чтобы набирать cp
, а затем Ctrl+V, вам нужно будет ввести cp "
, затем вставить, а затем "
, чтобы закрыть кавычки.
Ответ или решение
Команда cp
в Unix и Unix-подобных операционных системах, таких как macOS, предназначена для копирования файлов и каталогов. Понимание того, почему команда может не работать с путями, скопированными с помощью команды pwd | pbcopy
, требует глубокого анализа, основанного на поведении командной оболочки и правилах обработки аргументов.
Проблема с разделителями
Когда вы выполняете команду pwd | pbcopy
, содержимое рабочего каталога копируется в буфер обмена. Однако при вставке этого пути команды cp
оболочка (shell) интерпретирует путь как набор отдельных токенов, разделяемых пробелами. В данном случае путь, который вы вставляете, включает пробелы в названиях директорий:
/Users/JohnSmith/PycharmProjects/100 Days of Code - The Complete Python Pro Bootcamp2/Day 2/Type Error, Checking and Conversion
Оболочка видит это как несколько отдельных аргументов, что приводит к ошибке, когда она пытается найти путь. Например, слово "Code" и "Bootcamp2" воспринимаются как отдельные аргументы, и оболочка не может интерпретировать их как один объект.
Заключение в кавычки
Чтобы избежать подобных проблем, необходимо заключить пути с пробелами в кавычки. Вот как это делается:
cp "/Users/JohnSmith/PycharmProjects/100 Days of Code - The Complete Python Pro Bootcamp2/Day 2/Type Error, Checking and Conversion/task.py" task-2.py
Заключение в кавычки сообщает оболочке, что весь текст внутри них является одним параметром, что позволяет избежать кавычек, пробелов или других специальных символов, которые могут помешать правильному функционированию команды.
Использование символа "/"
Когда вы добавляете символ "/ " в конце пути, команда cp
воспринимает это как попытку указать на каталог, что изменяет способ интерпретации аргумента.
Если вы указываете путь к файлу, необходимо удостовериться, что путь и имя файла заключены в кавычки, чтобы избежать ошибок.
Вывод
Данная проблема не является ошибкой в Unix или команде pwd | pbcopy
, а скорее является следствием стандартного поведения оболочки при интерпретации аргументов. Чтобы избежать подобных ошибок в будущем, всегда оборачивайте пути, содержащие пробелы, в двойные кавычки или используйте экранирование с помощью обратного слэша ().
Определенно, тщательное понимание работы командной оболочки и правильное использование кавычек помогут вам избежать множества распространенных ошибок при копировании и перемещении файлов в Unix-подобных системах.