Forum Linux.général Mésaventure avec scp

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes : aucune
2
3
oct.
2016

J'ai écrasé un fichier avec une mauvaise manip et je ne comprends pas que je n'ai pas eu de message d'erreur.

dans le répertoire il y a a.a et a.b

Je fais "scp a.*" au lieu de " scp a.* moi@truc:" .

Du coup il écrase a.b avec a.a .

Quelqu'un peu m'expliquer l'interprétation de scp ? Avec une telle commande, il m'aurait semblé naturel de renvoyer un message d'erreur.

Merci.

  • # Tout est normal

    Posté par  (site web personnel) . Évalué à 7.

    Si tu lis le manuel de scp, tu constaterais que les arguments user@host sont facultatifs, de ce fait scp peut remplacer cp si tu l'omets pour les sources et la destination.

    En plus, l'usage du caractère * fait une expansion de ta commande avant exécution. En gros ton scp a.* s'est transformée par le shell en scp a.a a.b (car normalement c'est l'ordre alphabétique qui est utilisé).

    Tout ceci abouti au résultat que tu as. C'est déroutant, mais comme c'est le fonctionnement normal du programme, il ne peut pas t'afficher de message d'erreur.

    • [^] # Re: Tout est normal

      Posté par  . Évalué à 3.

      Effectivement scp écrase par défaut la destination sans confirmation…

      ⚓ À g'Auch TOUTE! http://afdgauch.online.fr

    • [^] # Re: Tout est normal

      Posté par  (site web personnel) . Évalué à 2.

      Tu veux dire que c'est le shell qui transforme a.* en a.a a.b ?
      Naïvement je pensais que le a.* était interprété par scp.

      • [^] # Re: Tout est normal

        Posté par  (site web personnel) . Évalué à 7.

        Oui, c'est bien le Shell qui gère ça.

      • [^] # Re: Tout est normal

        Posté par  . Évalué à 2.

        Naïvement je pensais que le a.* était interprété par scp.

        Et on refait dans tous les programme l'évaluation et l'expansion de paramètres :P Si tu veux éviter une évaluation des */? il faut utiliser des simple quotte ou double quotte.

        Il ne faut pas décorner les boeufs avant d'avoir semé le vent

      • [^] # Re: Tout est normal

        Posté par  (site web personnel) . Évalué à 2.

        Non non, c'est bien le shell.

        J'ai un collègue qui avait un -.o dans un répertoire, et la commande ls *.o n'aimait pas du tout (ls se retrouvait avec une option -.o a gérer, produite par le shell ; je lui ai montré l'option -- de ls pour arrêter le traitement des options et prendre les paramètres suivants tels quels).

        moi@host:~$ touch -- -.o
        moi@host:~$ ls *.o
        ls : option invalide -- '.'
        Saisissez « ls --help » pour plus d'informations.
        moi@host:~$ ls -- *.o
        -.o
        moi@host:~$ rm -- -.o
        

        Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

  • # Dans le même genre

    Posté par  . Évalué à 4.

    Dans le même genre, j’ai des shells qui utilisent > comme dernier caractère du prompt (au lieu de $ ou #). Et bien ça n’a pas raté, en faisant un copier/coller une personne a malencontreusement sélectionné ce >, exécutant ainsi >script.sh, ce qui abouti à supprimer purement et simplement le contenu de script.sh, sans effacer le fichier ni produire le moindre message d’erreur… Si c’est un script qui ne produit rien sur stdout c’est facile de croire qu’il s’est bien exécuté…

    Quand on dit qu’il faut travailler avec le minimum de droits (donc surtout pas en root) c’est pas pour se la jouer… il y a des trucs assez casse-gueule quand on utilise le shell… une espace malencontreuse dans les arguments d’un rm et pouf les fichiers…

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.