J'ai besoin de créer un script bash pour créer et monter un lecteur. Donc, deux commandes simples. Les deux "fonctionnent" lorsqu'ils sont entrés sur la ligne de commande.
Le script est créé et exécuté chaque fois qu'un utilisateur normal se connecte, j'ai donc besoin d'une méthode pour rendre ce script exécutable à ce moment-là. Jusqu'à présent, je ne peux pas faire fonctionner cela. Par exemple, la première partie mkdir /vvv/gggg
ne se déroule pas car le script n'est pas exécutable (je suppose).
J'espère que cela a du sens. Est-ce possible? Toute réflexion sur la façon de faire ce travail sera appréciée.
Mise à jour :
Merci pour vos réponses. Je devrais probablement ajouter des informations supplémentaires à part le fait que je suis nouveau sous Linux.
J'utilise une application de bureau virtuel open source appelée Ulteo. Cette application fonctionne sur Ubuntu et a très peu de support - c'est pourquoi je suis ici. En gros, j'apprends par le feu.
Ainsi, l'application a une fonction de gestion de script de connexion où je peux lier un script à un utilisateur. Un simple script Windows avec une utilisation nette fonctionne parfaitement. Cependant, lorsque j'essaie d'appliquer un script bash Linux, rien ne se passe.
Je pense que parce que je dois d'abord effectuer une chmod +x
contre le script pour rendre le script exécutable, c'est pourquoi son échec. Soit dit en passant, Ulteo s'exécute dans une prison chroot. J'ai créé un script, je l'ai enregistré et je n'ai pas pu trouver le script. J'ai fouillé à l'intérieur et à l'extérieur de la prison chroot.
J'aime l'approche de dan08 pour que le script initial fasse référence à un autre script que je peux trouver et rendre exécutable manuellement. Serais-je confronté au même problème?
Ces informations supplémentaires clarifient-elles la situation? Merci d'avance.
Photos jointes.
! [console de gestion de scipt de connexion] [1]
! [scripts Windows qui fonctionnent] [2]
! [script linux simple qui ne fonctionne pas] [3]
Désolé, je ne peux pas encore publier d'images
la source
ls -l scriptname
. Vous devez également clarifier comment exactement le script est créé et pourquoi vous ne le créez pas une seule fois et ne le laissez pas. Enfin, votre utilisateur normal ne devrait pas avoir accès en écriture à/var
et ne devrait donc pas pouvoir y créer de répertoires.Réponses:
Il y a deux choses que vous devez faire:
Référencez l'interpréteur de script au début du script:
Définissez les autorisations pour le rendre exécutable:
la source
Plutôt que de rendre votre script exécutable, vous pouvez adopter une approche différente et changer la façon dont vous appelez le script.
script.sh
est suffisant pour exécuter un script exécutable.pourtant
Il est possible d'exécuter un script non exécutable si vous spécifiez le programme pour l'exécuter.
Donc,
/bin/bash script.sh
oubash script.sh
oupython script.py
exécuteront tous des scripts non exécutables.Donc, ma suggestion serait de modifier la façon dont le script est appelé et de spécifier le binaire utilisé pour l'exécuter.
la source
os.execv(__file__, sys.argv)
ne fonctionnerait pas, et c'est sûr qu'il y a plus de situations comme ça. Si la sécurité est un objectif, utilisez-la simplement à partir de root / sudo et laissez plutôt les utilisateurs exécuter des binaires. De plus, si l'objectif est la sécurité, vous ne voulez pas qu'ils puissent exécuter des scripts, car vous pouvez de toute façon endommager le système ... exécutable ou non. Je ne vois donc pas pourquoi il est important d'éviter d'en faire des exécutables.Créez un programme en C, C ++ ou Python etc. et utilisez la commande système pour exécuter le script bash.
Par exemple, un programme C ressemblerait à:
Pour exécuter le programme au démarrage, ajoutez-le à la liste des programmes de démarrage. Ouvrez les applications de démarrage à partir de votre tableau de bord et ajoutez l'exécutable compilé à la liste en cliquant sur le bouton Ajouter.
la source
bash path/yourbashscript.sh
.bash path/yourbashscript.sh
directement au lieu de compiler et d'exécuter ce programme C?Vous pouvez rendre votre script bash exécutable en exécutant ce qui suit dans la ligne de commande.
Ensuite, le faire exécuter au démarrage peut être fait en l'ajoutant à votre liste de programmes de démarrage comme l'a dit @akabhirav.
la source
SHC est un compilateur de script shell générique. Il prend un script, qui est spécifié sur la ligne de commande et produit du code source C. Le code source généré est ensuite compilé et lié pour produire un binaire supprimé.
Le binaire compilé dépendra toujours du shell spécifié dans la première ligne du code shell (le shebang:
#!/bin/sh
ou tel), donc SHC ne crée pas de binaires complètement indépendants.SHC lui-même n'est pas un compilateur tel que
cc
. Encode et chiffre plutôt un script shell et génère du code source C avec la capacité d'expiration supplémentaire. Il utilise ensuite le compilateur système pour compiler un binaire dépouillé qui se comporte exactement comme le script d'origine. Lors de l'exécution, le binaire compilé décryptera et exécutera le code avec l'-c
option du shell .la source
#!
etchmod +x
?