Comment faire un fichier (par exemple un script .sh) exécutable, de sorte qu'il puisse être exécuté depuis un terminal

245

J'ai un fichier script.sh et le type de ce fichier est un fichier shellscript. Je veux faire ce fichier en tant que fichier application / x-executable. Comment puis-je le faire?

Ziyaddin Sadigov
la source
1
Double possible de Comment exécuter les fichiers .sh?
Karel
Ce n’est pas un doublon, car j’ai demandé précisément comment le rendre application / x-exécutable. L'autre question demande simplement l'ouverture du fichier sh dans le terminal.
Ziyaddin Sadigov

Réponses:

326

Vous pouvez marquer le fichier comme exécutable:

chmod +x filename.sh

Vous pouvez ensuite l'exécuter comme ceci:

./filename.sh

Si vous souhaitez utiliser une commande différente pour la démarrer, vous pouvez ajouter un alias:

gedit ~/.bashrc

Ajoutez ceci à la fin du fichier:

alias <new name>='/home/<full path to script>/filename.sh'

Ouvrez une nouvelle session de terminal ou tapez source ~/.bashrcvotre terminal à appliquer. Ensuite, utilisez simplement le nouveau nom pour lancer le script.

rɑːdʒɑ
la source
Savez-vous comment utiliser la commande sudo après avoir entré la commande sous la forme suivante: "alias command1 = '/home/nom_utilisateur/dir/script.sh'. Dans le mien, cela fonctionne sans sudo, mais pas avec.
Aditya
Vous devez redémarrer bash après avoir modifié le fichier .bashrc run: exec bash pour redémarrer bash.
Sampath Perera
2
Pourquoi le fichier exécutable est-il ./filename.shet pas seulement filename.sh?
user1993
@ user1993 oui, je cherche aussi un moyen de le rendre exécutable juste avant filenameet pas./filename
MycrofD
@ user1993 En règle générale, utiliser ./filename.shspécifie un fichier dans le répertoire actuel et filename.shspécifie un fichier dans le répertoire actuel ou l'un des répertoires de PATH. La première utilisation supprime toute incertitude quant au fichier utilisé. Dans ce cas, vous essayez d'exécuter le script avec bash ou un autre interpréteur (en vertu de la #!/bin/bashpremière ligne de votre script), en entrant simplement le nom du fichier. Cette utilisation nécessite que le répertoire soit spécifié. Alternativement, vous pouvez essayer bash filename.shce qui semble fonctionner avec un répertoire non spécifié.
a505999
37

Il existe deux manières de rendre un fichier exécutable:

Méthode GUI:

Allez sur l'onglet autorisations, puis cochez la case `Exécuter: [] Autoriser l'exécution du fichier en tant que programme.

entrez la description de l'image ici

Méthode terminal / commande:

Vous pouvez soit utiliser:

cd /to/my/required/directory

Puis courir

chmod +x filename.extension

Ou tout simplement courir:

chmod +x /path/to/your/filename.extension

chmod a aussi quelques options plus avancées:

Les espaces doivent montrer qu'il est divisé: - rwx --- ---

Le premier ensemble ---est User. Le second est groupe et le dernier est autre (quelqu'un d'autre)

r signifie Read, w pour Write et x pour eXecute.

Donc, permettre à tout le monde de le lire, mais seul le groupe à exécuter et l'utilisateur à le lire et l'écrire (mais pour une raison quelconque ne pas exécuter) serait:

-rw- rx- r-- Mais ceci serait ajouté à la commande en tant que:

chmod +rw-rx-r-- /path/to/file.extension

chmodpeut aussi le faire en chiffres. Il est basé sur le binaire (je pense, comme il est 1,2 et 4)

Donc, il y a ces chiffres:

Exécuter par l'utilisateur est 100. Exécuter par groupe est 010. Exécuter par d'autres est 001

Ecrire par utilisateur est 200. Ecrire par groupe est 020. Ecrire par d'autres est 002.

Lu par l'utilisateur est 400. Lire par groupe est 040. Lu par d'autres est 004.

Ensuite, vous ajoutez ces éléments pour obtenir la combinaison souhaitée.

Donc, permettre à tout le monde de le lire, mais seul le groupe à exécuter et l'utilisateur à l'écrire (mais pour une raison quelconque ne pas s'exécuter) serait:

400 + 040 + 004et 010et200

Cela ajoute 600 + 050 + 004 = 654.

Vous pouvez ensuite exécuter la commande.

chmod +654 /path/to/file.extension pour le définir.

Et pour définir toutes les autorisations, vous pouvez taper:

chmod +rwxrwxrwx /path/to/file.extension

Ou (c'est un peu plus facile à écrire, mais plus difficile à retenir pour chacun):

chmod +777 /path/to/file.extension

Enfin, vous pouvez faire:

chmod -777 /path/to/file.extension

Supprimer toutes les autorisations de tout le monde.

Et:

chmod +300 /path/to/file.extension

Pour ajouter en lecture et en écriture pour l'utilisateur, sans affecter les autres autorisations (par exemple les autorisations d'exécution).

Ce site Web a une fonction très utile de case à cocher dans la grille, grâce à laquelle vous pouvez cocher les options souhaitées et vous donner la commande:

entrez la description de l'image ici

Cependant, toutes les combinaisons possibles ne sont pas judicieuses; les principaux utilisés sont les suivants:

755 - Ownera tout, et Groupet Otherpeut lire et exécuter

700 - Ownera tout

644 - Ownersait lire et écrire, Groupet Otherpeut lire

600 - Ownersait lire et écrire

Et si vous utilisez des groupes d'utilisateurs non triviaux:

775 - Ownersait lire et écrire, Groupet Otherpeut lire

770 - Owneret Groupont tous, et Otherpeuvent lire et exécuter

750 - Ownera tout, et Grouppeut lire et exécuter

664 - Owneret Groupsait lire et écrire, et Otherpeut simplement lire

660 - Owneret Groupsait lire et écrire

640 - Ownersait lire et écrire et Grouppeut lire

777 et 666 sont rarement utilisés, sauf dans / tmp.

Merci à Ilmari Karonen d' avoir signalé ceux qui sont couramment utilisés!

Tim
la source
N'est-il pas basé sur octal (8 bases) au lieu de binaire (base 2)? En binaire, vous ne pouvez avoir que 0 et 1, alors qu'en octal, vous pouvez avoir 0, 1, ... 6, 7
Justinas
@Justinas binaire dans ce 7 = 4 + 2 + 1 - 111 représente Read and Write and Execute.
Tim le
8

Courir:

chmod +x /path/to/file.sh

Pour le rendre non exécutable, lancez:

chmod -x /path/to/file.sh

Par exemple j'ai créé le .shfichier:

vi tester12.sh

Après avoir écrit du code sur l'éditeur vi, je quitterai l'éditeur vi:

:wq!
chmod +x tester12.sh
./tester12.sh
Jim
la source