Сценарий оболочки cp не работает (но работает в терминале) Mac OS X

Недавно я узнал о сценариях оболочки и был озадачен странной ошибкой:

Мой простой скрипт (test.command):

#!/bin/sh
clear
cd /Users/Stan/Desktop/testFolder
ls 
cp "earth.png lol.png"
read -p "Done, press ENTER to finish"

Всякий раз, когда я запускаю скрипт (двойной щелчок по файлу.command), здесь выводится (копируется из окна терминала):

earth.png
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file target_file
       cp [-R [-H | -L | -P]] [-fi | -n] [-apvX] source_file ... target_directory
Copy was done...?
earth.png
Done, press ENTER to finish

СР ВСЕГДА выдает ошибку "использования", и НЕ БУДЕТ копировать что-либо, но теперь, если я вручную запускаю ТОТ ЖЕ точные команды, по порядку в терминале (копия окна терминала):

Stans-Mac-mini:testFolder Stan$ ls
earth.png
Stans-Mac-mini:testFolder Stan$ cp earth.png lol.png
Stans-Mac-mini:testFolder Stan$ ls
earth.png   lol.png
Stans-Mac-mini:testFolder Stan$ 

Файл скопирован без ошибок! Пожалуйста, помогите мне исправить это, я не мог найти какие-либо решения онлайн, помощь очень ценится!

2 ответа

Решение

Когда вы цитируете исходные и целевые аргументы, предоставленные cp как одна строка, он получает только один аргумент.
Команда:

cp "earth.png lol.png"

пытается скопировать один файл с именем "earth.png lol.png" (который, кстати, является совершенно допустимым именем файла), но затем не может предоставить второй аргумент.
Вместо этого процитируйте каждый отдельный аргумент:

cp "earth.png" "lol.png"

+ Изменить cp команда

cp "earth.png" "lol.png"

cp Формат команды: cp <from> <to>, Ваша команда имеет это как cp "<single-file>", И то и другое earth.png а также lol.png находятся в кавычках, и это делает его одним файлом. Второй аргумент отсутствует, и это является причиной "ошибки использования"

Другие вопросы по тегам