Почему команда “cp” не работает с вставленным путем директории из команды “pwd | pbcopy”?

Вопрос или проблема

Я выполнил команду 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-подобных системах.

Оцените материал
Добавить комментарий

Капча загружается...