2016-04-02 1 views
0

J'ai récemment appris sur les scripts shell, et je suis déconcerté par une erreur bizarre:Shell script cp ne fonctionne pas (mais travaillant dans le terminal) Mac OS X

Mon script simple (test.command):

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

Chaque fois que je lance le script (double-cliquant sur le fichier .command), voici la sortie (copié à partir de la fenêtre de terminal):

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 

cp donne toujours une erreur 'd'utilisation', et copie WONT quoi que ce soit, mais maintenant si im exécutez anually les mêmes commandes exactes, pour dans le terminal (copie de fenêtre de terminal):

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$ 

Le fichier obtenu copié sans aucune erreur! S'il vous plaît aidez-moi à résoudre ce problème, je ne pouvais pas trouver de solutions en ligne, l'aide est grandement appréciée!

+0

Vous devez être auto-cohérent. Dans le script, vous utilisez des guillemets doubles; sur la ligne de commande, vous ne le faites pas. Vous obtenez des résultats différents à cause de cette incohérence. –

Répondre

3

Lorsque vous citez les arguments source et destination fournis à cp comme une chaîne, il obtient uniquement l'argument un.
La commande:

cp "earth.png lol.png" 

tente de copier un fichier avec le nom "earth.png lol.png" (qui, par la voie est un nom de fichier parfaitement valide), mais ne parvient pas à fournir un second argument.
Au lieu de cela, je cite chaque argument:

cp "earth.png" "lol.png" 
+0

Merci beaucoup, cela m'a sauvé des heures :) –

3

Changement de commande cp

cp "earth.png" "lol.png" 

cp format de commande est: cp <from> <to>. Votre commande l'a comme cp "<single-file>". Les deux earth.png et lol.png sont dans les guillemets et cela en fait un seul fichier. Deuxième argument est manquant et c'est la raison pour "erreur d'utilisation"