Forum Programmation.shell Un bug dans les shell ?!!!! Mais en fait non (Linux fuck Posix)

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
7
27
août
2023

Bonjour,

> pwd
/home/$USER/a
> pwd -P
/home/$USER/b

Pourtant :

> man pwd
...
If no option is specified, -P is assumed.
...

Essayé avec zsh, bash, dash. Tous les builtins sont ko. /bin/pwd est ko.

Du coup je jette un œil dans la doc des shell. Il est indiqué à chaque fois : « si l’option -P est spécifiée alors… ». Oki doki, mais what si elle n’est pas spécifiée ? Les man sont silencieux.

Pris d’un doute :

> man 1p pwd
...
       If both -L and -P are specified, the last one shall apply. If neither
       -L nor -P is specified, the pwd utility shall behave as if -L had been
       specified.
...

Et oui, j’ai un petit export POSIXLY_CORRECT= planqué quelque part dans un profil.

C’est la première fois que je tombe sur un cas concret de comportement totalement inversé entre Linux et Posix.

La question existentielle du jour : mais POURQUOI ???

  • # Du danger du prompt ">"

    Posté par  . Évalué à 10. Dernière modification le 27 août 2023 à 19:19.

    Je ne sais pas si c'est du à la mise en page, ou tu a sréellement ce prompt, mais perso j'évite, et je le vire de toutes les machines de prod qui passent entre mes mains.

    Une fois, au boulot, on s'est retrouvé avec des scripts qui ne fonctionnaient plus. En cherchant un peu, on s'est rendu compte qu'un binaire avait disparu. Pour quoi ? Parce que quelqu'un avait fait un copier/coller malencontreux et avait exécuté

    > /chemin/vers/le/binaire

    au lieu de

    /chemin/vers/le/binaire

    La personne avait fait un copier/coller qui prenait un caractère en trop (deux avec l'espace) sans s'en rendre compte … et en voulant aller vite n'a pas pris le temps de vérifier avant de valider sa frappe.

  • # peut-être une erreur dans le manuel

    Posté par  . Évalué à 2.

    Bonjour

    Effectivement, on peut lire (sur debian) dans le manuel de la commande pwd que :

    … Si aucune option n’est indiquée, -P est assumé. …

    Mais le comportement de la commande pwd sur debian ne correspond pas à cette description :

    mic@deb12:~/Téléchargements$ ls -l ~/Téléchargements
    lrwxrwxrwx 1 mic mic 22 17 août  19:44 /home/mic/Téléchargements -> /mnt/Téléchargements
    mic@deb12:~/Téléchargements$ pwd
    /home/mic/Téléchargements
    mic@deb12:~/Téléchargements$ pwd -L
    /home/mic/Téléchargements
    mic@deb12:~/Téléchargements$ pwd -P
    /mnt/Téléchargements
    mic@deb12:~/Téléchargements$

    Le comportement observé correspond plutôt à celui décrit dans le manuel de la commande posix pwd :

    … If neither -L nor -P is specified, the pwd utility shall behave as if -L had been specified. …

    • [^] # Re: peut-être une erreur dans le manuel

      Posté par  . Évalué à 6.

      La page de man à une note:

      NOTE: your shell may have its own version of pwd, which usually
      supersedes the version described here. Please refer to your
      shell's documentation for details about the options it supports.

      Le bourne shell, puis ses héritiers dont bash et zsh utilisent tous un builtin. La doc de bash précise

      Print the absolute pathname of the current working directory. If the -P option is supplied, the pathname printed will not contain symbolic links. If the -L option is supplied, the pathname printed may contain symbolic links. The return status is zero unless an error is encountered while determining the name of the current directory or an invalid option is supplied.

      • [^] # Re: peut-être une erreur dans le manuel

        Posté par  . Évalué à 1. Dernière modification le 27 août 2023 à 22:38.

        Effectivement, j'utilisais la commande interne pwd du shell bash
        et il n'y a pas d'erreur dans le manuel de la commande /usr/bin/pwd

        mic@deb12:~/Téléchargements$ /usr/bin/pwd
        /mnt/Téléchargements
        mic@deb12:~/Téléchargements$ /usr/bin/pwd -P
        /mnt/Téléchargements
        mic@deb12:~/Téléchargements$ /usr/bin/pwd -L
        /home/mic/Téléchargements
        mic@deb12:~/Téléchargements$
  • # c'est pas Linux c'est GNU

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

    De rien.

    pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

    • [^] # Re: c'est pas Linux c'est GNU

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

      Ce que tu dis n'est pas complètement exact :

      [gnunux@gnunux ~]$ /usr/bin/pwd --version
      pwd (GNU coreutils) 9.1
      Copyright © 2022 Free Software Foundation, Inc.
      [..]
      Ce n'est pas GNU mais GNU/Bash. GNU/coreutils respect POSIX.

      En même temps … l'option -L est bien plus logique par défaut que l'option -P … Je dis ça …

Suivre le flux des commentaires

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