web-dev-qa-db-fra.com

Comment attribuer une autorisation d'exécution à un fichier .sh dans Windows à exécuter sous Linux

Voici mon problème,

Sous Windows, je crée un fichier Zip contenant un fichier texte .sh qui doit être exécuté sous Linux. L’utilisateur à l’autre extrémité ouvre le fichier Zip sous Linux et tente d’exécuter le fichier .sh mais l’autorisation d’exécution a disparu. L’utilisateur doit donc le faire manuellement (comme expliqué ici: ajouter une autorisation d’exécution .

Comment puis-je sous Windows rendre le fichier .sh exécutable et l'ajouter à un fichier Zip afin que, lorsque le fichier Zip s'ouvre sous Linux, le fichier .sh conserve son autorisation d'exécution (de sorte que l'utilisateur ne soit pas obligé de le faire manuellement)

41
C graphics

Autant que je sache, le système de permission sous Linux est configuré de manière à empêcher exactement ce que vous essayez d'accomplir.

Je pense que le mieux que vous puissiez faire est de donner à votre utilisateur Linux un one-liner unzip personnalisé à exécuter sur l'invite:

unzip Zip_name.Zip && chmod +x script_name.sh

Si vous devez attribuer une autorisation d'exécution à plusieurs scripts, écrivez un grant_perms.sh comme suit:

#!/bin/bash
# file: grant_perms.sh

chmod +x script_1.sh
chmod +x script_2.sh
...
chmod +x script_n.sh

(Vous pouvez placer tous les scripts sur une seule ligne pour chmod, mais j’ai trouvé que l’utilisation de lignes séparées était plus facile à utiliser dans vim et avec les commandes de script Shell.)

Et maintenant, votre one-liner unzip devient:

unzip Zip_name.Zip && source grant_perms.sh

Notez que puisque vous utilisez source pour exécuter grant_perms.sh, il n'a pas besoin de permission d'exécution

47
sampson-chen

Le format de fichier Zip permet de stocker les bits d'autorisation, mais les programmes Windows l'ignorent normalement. Cependant, l'utilitaire Zip sous Cygwin conserve le bit x, comme il le fait sous Linux. Si vous ne souhaitez pas utiliser Cygwin, vous pouvez utiliser un code source et le modifier de manière à ce que tous les fichiers * .sh obtiennent le jeu de bits exécutables. Ou écrivez un script comme expliqué ici

7
jmster

Ceci est possible en utilisant les utilitaires Info-Zip open-source Zip. Si décompressez est exécuté avec le paramètre - X , il tentera de conserver les autorisations d'origine. Si le système de fichiers source était NTFS et que la destination est un système Unix, il tentera de traduire l'un de l'autre. Je n'ai pas de système Windows disponible actuellement pour tester la traduction. Vous devrez donc essayer quel groupe doit recevoir des autorisations d'exécution. Ce sera quelque chose comme "Utilisateurs" ou "Tout utilisateur"

3
itsbruce