web-dev-qa-db-fra.com

Résolution de l'obscurcissement de $ PATH par / bin / sh (tiret)

Cette question fait suite à https://unix.stackexchange.com/questions/126955/percent-in-path-environment-variable . Je le poste ici, car il est plus spécifique à la distribution.

Le Shell utilisé par défaut pour sh à savoir dash, n'est pas compatible avec execvp car il tripote la variable $ PATH. Une manière standardisée de gérer les noms de fichiers étranges consiste à utiliser un schéma de codage d'URL. Maintenant, je ne peux pas utiliser cette norme car le tableau de bord réserve%. Pour résoudre ce problème, j'ai les options suivantes

  1. Recommander à mes utilisateurs sur Ubuntu de changer le lien symbolique/bin/sh en quelque chose d'autre comme bash. Il est nécessaire de le faire globalement car popen (3) s'appuie sur/bin/sh.

  2. Déviez de l'encodage d'URL traditionnel en utilisant autre chose que%

  3. Lance une erreur chaque fois que l'un des les caractères interdits (oui, Windows mais ces restrictions sont sensées dans une configuration à double démarrage) apparaît.

Idéalement, je préfère que l'option (1) semble la meilleure solution. Il permet d'utiliser un schéma d'échappement standardisé dans les noms de fichiers. Cependant, puisque dash se comporte clairement différemment de certains autres shells, il cassera le système si l'un des scripts système s'appuie sur des fonctionnalités uniques à dash. Cela nécessite également que l'utilisateur dispose des privilèges root.

L'option (2) implique que je dois trouver un autre symbole qui n'entre en collision nulle part. Certes, certains Shell peut bousiller tout symbole qui n'est pas une lettre.

L'option (3) implique une réduction trop importante des fonctionnalités

1
user877329

La première option est assez simple. Vous avez juste besoin de lancer:

Sudo dpkg-reconfigure dash

Et choisissez Non. Ça va pousser /bin/sh retour à /bin/bash.

Vous pouvez le faire manuellement (supprimer le lien, en créer un nouveau) mais c'est le méthode officielle .

1
Oli