Comment puis-je exécuter des scripts .sh?

344

Chaque fois que j'ouvre un fichier .sh, il l’ouvre dans gedit au lieu du terminal. Je ne trouve aucune option similaire à Clic droitOuvrir avecAutre application ...Terminal .

Comment puis-je ouvrir ce fichier dans le terminal?

Alex
la source
Ce script vise-t-il à configurer des variables env pour une utilisation ultérieure?
Rob
1
Vous ne devriez pas utiliser d'extensions sur des scripts. À l'avenir, vous constaterez peut-être qu'une langue différente est plus appropriée pour effectuer la tâche effectuée par votre script actuel. Et puis vous avez un problème. Conservez-vous l'ancien nom, avec une extension complètement trompeuse, ou le renommez-vous, en ayant éventuellement à modifier beaucoup d'endroits où votre script est utilisé?
geirha
Vous n'avez pas besoin de l'extension de fichier. C'est bien d'avoir mais ce n'est pas nécessaire. Le système d'exploitation ne regarde pas l'extension de fichier. Il regarde les données
ActionParsnip
5
Meh, si vous réécrivez foo.sh en ruby, vous pouvez toujours utiliser le fichier .sh pour le lancerruby foo.rb
glenn jackman
Dans Dolphin, vous pouvez appuyer sur F4 et une console s'ouvre
Motte001

Réponses:

523

Donnez la permission d'exécution à votre script:

chmod +x /path/to/yourscript.sh

Et pour lancer votre script:

/path/to/yourscript.sh

Puisque .fait référence au répertoire actuel: si se yourscript.shtrouve dans le répertoire actuel, vous pouvez le simplifier pour:

./yourscript.sh
karthick87
la source
13
+1 seulement réponse pour montrer en ajoutant les autorisations d'exécution dans un terminal seulement.
Hailwood
83
Si vous le faites, vous n'en bash /path/to/yourscript.shavez pas besoinchmod +x
Aleksandr Levchuk,
4
En fait, vous pouvez utiliser . /path/to/yourscript.shsi le script doit configurer certaines variables d’environnement.
Rob
1
Personne ne mentionne le traditionnel: ./path/to/yourscript.sh(sans l'espace après .)? Je trouve que celui-ci est le plus simple et le plus facile à utiliser ... Mais enfin, voici mon alternative qui devrait faire presque la même chose que ./je le ferais, bien que je ne vois pas pourquoi vous ne l'utiliseriez pas ./: (FILENAME=~/rem4space.sh;SLL=$(cat $FILENAME|head -1|sed 's:^#!\(.*\):\1:g');[ ! -z $SLL ] && exec $SLL $FILENAME;sh $FILENAME)... modifier FILENAMEà votre guise . Notez également que shsera utilisé s'il n'y a pas d'alternative.
MiJyn
88

Vous devez marquer les scripts de shell comme étant exécutables pour les exécuter à partir du gestionnaire de fichiers:

  1. Faites un clic droit sur votre .shfichier et sélectionnez Propriétés :

    entrez la description de l'image ici

  2. Dans l' onglet Autorisations , cochez Autoriser l'exécution du fichier en tant que programme :

    entrez la description de l'image ici

  3. Fermez la Propriétés fenêtre et double-cliquez sur le fichier. Une boîte de dialogue apparaîtra vous donnant la possibilité d'exécuter le script dans un terminal:

    entrez la description de l'image ici

Isaïe
la source
10
Cela ne fonctionne pas dans Ubuntu 13.04. Continue à ouvrir dans gedit de toute façon, ne me demande jamais d’exécuter. Edit: Nvm, imjustmatthew répond à cette question.
mardi
Avant d’utiliser ceci, nous devons donner l’autorisation de fichier pour exécuter en utilisant chmod. chmod + x nom_fichier.sh ou chmod 755 nom_fichier.sh
Arvind Rawat
Je n'ai pas de popup! IDE est ouvert tout de suite, pas un popup
Vert
Comment se fait-il que je ne trouve pas "run in terminal" n'importe où sur mon interface? (Ubuntu 18.04)
Daniel Möller
1
@ DanielMöller, voici la réponse à votre question. askubuntu.com/questions/38661/how-do-i-run-sh-files/…
Akhilesh Dhar Dubey
33

Ouvrez un terminal et accédez au dossier dans lequel .shse trouve le fichier. Puis tapez:

sh <name of file>.sh
pied italien
la source
la meilleure façon d'ouvrir n'importe quelle application. Accédez au répertoire .sh puis ouvrez-le à l'invite de commande. l'utilisation sh <nom du fichier comme indiqué ci-dessus> .sh si une autorisation est requise, utilisez chmod + x /path/to/yourscript.sh ou cliquez avec le bouton droit de la souris et modifiez l'autorisation à tous
Durgesh Kumar
24

Prérequis

Avant de pouvoir exécuter le fichier .sh, vous devez le rendre exécutable:

  1. Faites un clic droit sur le fichier
  2. Sélectionnez Propriétés
  3. Sélectionnez les autorisations
  4. Sélectionnez Autoriser l'exécution du fichier en tant que programme.

Attention

Assurez-vous de faire confiance à la source d'où vous avez obtenu le fichier. Ce pourrait être un virus .

Le moyen très simple

  1. Double-cliquez sur le fichier
  2. Cliquez sur courir dans le terminal

Cela a un problème. Le terminal se fermera immédiatement et vous ne pourrez pas voir la sortie.

La manière simple

  1. Applications ouvertes -> Accessoires -> Terminal
  2. Faites glisser le fichier .sh dans le terminal, puis appuyez sur Entrée.

La façon dont les professionnels le font

  1. Applications ouvertes -> Accessoires -> Terminal
  2. Trouver où se trouve le fichier .sh

    • Utilisez les commandes lsetcd
    • lslistera les fichiers et les dossiers du dossier actuel . Faites un essai: tapez "ls" et appuyez sur Entrée.
    • Une fois que vous voyez le dossier dans lequel vous voulez aller, lancez-le cd, suivi d'un espace, puis d'un nom de dossier
    • Si vous entrez dans un dossier que vous ne vouliez pas, lancez-vous cd ..pour aller d'un niveau supérieur
  3. Exécuter le fichier .sh

    • Une fois que vous pouvez voir par exemple script1.shavec lsrun this:

      ./script.sh

Pourquoi le faire de manière compliquée?

Le terminal dispose d'un riche ensemble d'outils puissants accessibles en tapant les commandes. Les professionnels localisent le fichier .sh en tapant lset cd. Une fois que vous êtes dans le bon dossier actuel, vous pouvez exécuter le script de la manière suivante:

./script1.sh

ou vous pouvez exécuter et rediriger la sortie vers un fichier:

./script1.sh > out.txt

ou vous pouvez filtrer la sortie pour les mots-clés (par exemple "pommes") puis rediriger vers un fichier:

./script1.sh | grep apples > ./only-apples

Il y a des milliers de choses que vous pouvez faire dans ce fichier en tapant quelques commandes.

Un autre, vous pouvez télécharger un fichier depuis Internet avec une simple commande:

wget www.google.com/images/logos/ps_logo2.png

Et ouvrez ensuite le fichier comme ceci:

shotwell ps_logo2.png
Aleksandr Levchuk
la source
6
Je ne suis pas sûr que les professionnels de la façon dont le font est correct, il est plus un cas de manière simple l' avancée (pour le contrôle de la production) façon
Hailwood
Il est bon de savoir que je l'ai fait comme les professionnels lors de mon premier essai. Je pensais que c'était la méthode de base de l'utilisateur.
NelsonGon
18

Sous Ubuntu 13.04, les fichiers exécutables ouverts dans Nautilus sont désormais ouverts dans gedit par défaut plutôt que de demander à l'utilisateur de les exécuter. Pour activer le comportement classique, vous devez ajuster les préférences:

Nautilus → Menu Édition → Préférences → onglet Comportement → Cliquez sur le bouton radio à côté de Demander à chaque fois.

imjustmatthew
la source
La personne qui a posé la question parle d'Ubuntu 10.10
edwin le
1
Je vous remercie!!! Je ne sais pas pourquoi ils changeraient cela, ils ne pourraient pas exécuter quoi que ce soit.
mardi
1
C'est la bonne réponse pour le dernier Ubuntus.
GaRex
Comment se rendre à Nautilus en 15h10?
Yaakov Ainspan
À partir d'Ubuntu 18.04, vous pouvez accéder aux préférences en ouvrant un répertoire, puis en cliquant sur "Fichiers -> Préférences" dans la barre du haut.
Tparker
7

Allez dans le répertoire où se trouve le .shfichier en utilisant cd. Dans cet exemple, j'ai stocké mon shfichier sous le nom~/Desktop/shell_practice/test.sh

Commencez pwdpar déterminer où vous vous trouvez, et si elle revient /home/username(où usernameest votre vrai nom d’utilisateur), vous pouvez lancer

cd Desktop/shell/practice

Si vous semblez être ailleurs, vous pouvez utiliser le chemin absolu

cd ~/Desktop/shell/practice

ou

cd $HOME/Desktop/shell/practice

ou même

cd /home/$USER/Desktop/shell/practice

Ce sont toutes des façons de décrire le même endroit. Une fois que vous avez atteint l'emplacement de votre script, tapez

ls

Si vous pouvez voir le shfichier dans la sortie, vous pouvez l'utiliser chmodpour le rendre exécutable. Dans mon cas, rappelez-vous, le nom du fichier est test.sh, alors je lancerais

chmod u+x test.sh

Maintenant que nous sommes dans le même répertoire que le script, nous devons spécifier au shell que nous voulons exécuter le fichier en indiquant son emplacement ./(le répertoire en cours suivi d'un séparateur de chemin, afin de le distinguer du nom de fichier). Pour exécuter mon fichier, je taperais:

./test.sh

Si votre script a été écrit correctement, il fonctionnera sans erreur ...

Voici un exemple en direct: Voici un exemple en direct

L'Exorciste
la source
Cela a fonctionné pour moi d'installer Netbeans sur Ubuntu
RuD3B0y
1
Wb, @ RuD3B0y, j'ai essayé de garder les meilleures réponses pour noobs, pas de contenu high-tech, si vous avez des modifications, vous êtes les bienvenus.
TheExorcist le
4

2 étapes principales.

  1. dans terminal, utilisez gedit pour écrire et sauvegarder un script avec l’extension ".sh" sur le bureau. (mais n'importe quel éditeur de texte peut être utilisé)

  2. Ouvrez Nautilus et cliquez avec le bouton droit sur le fichier script.sh.

    • Sous Propriétés, cochez la case "Autoriser l'exécution du fichier".

    • dans le menu Nautilus, cliquez sur fichier, puis sur préférences, puis sur comportement

    • cochez la case "exécuter les fichiers texte exécutables à l'ouverture".

Maintenant, lorsque vous double-cliquez sur le fichier sur le bureau, il devrait s’exécuter. pas besoin .ou./

Rob
la source
3
  1. Cliquez avec le bouton droit sur le .shfichier et rendez-le exécutable.

  2. Ouvrez un terminal ( Ctrl+ Alt+ T).

  3. Faites glisser le .shfichier dans la fenêtre du terminal et observez-le avec admiration.

1p_bunny
la source
1
Bienvenue sur Ask Ubuntu! Je recommande d’ éditer cette réponse pour la développer avec des détails spécifiques sur la première étape. (Voir aussi Comment puis-je écrire une bonne réponse? Pour des conseils généraux sur les types de réponses considérés comme les plus utiles sur AskUbuntu.)
David Foerster
3

Il y a quelques façons de le faire.

Option 1

  1. Dans le terminal, accédez au répertoire utilisé par le fichier Bash cd(change directory).

    Ex. cd Downloads

  2. Courir bash <filename>.sh

    Cela fonctionne aussi avec les fichiers .run. Vous trouverez un exemple d'utilisation de cette page Web sur la mise à jour de Rhythmbox.

Option 2

  1. Dans le terminal, accédez au répertoire dans lequel se trouve le fichier bash.

  2. Courir chmod +x <filename>.sh

  3. Dans Nautilus, ouvrez le fichier.

Kenny Stier
la source
3

Pour Ubuntu 18.04 , il y a une petite modification, car vous n'obtenez pas de boîte de dialogue contextuelle.

Donc, ce que vous devez faire est:

Cliquez avec le bouton droit sur Fichiers, sélectionnez Préférences> Sélectionnez l'onglet Comportement> Cochez l'option "Demander quoi faire" sous Fichier texte exécutable.

Maintenant, lorsque vous double-cliquez sur n’importe quel fichier .sh, vous obtenez une popup, vous pouvez y sélectionner l’option "run in terminal" pour exécuter votre fichier .sh.

entrez la description de l'image ici

Akhilesh Dhar Dubey
la source
2

Dans Ubuntu 16.04, voici comment l’ouvrir dans Terminal:

Aller à la File Manager > Edit > Preferences > Behaviorpour Executable Text Fileset sélectionnez Ask each time.

Le problème est qu'il est réglé par défaut sur View Executable Files when they are opened.

Leniel Maccaferri
la source
1

Si vous placez votre script shell ou un autre exécutable que vous créez dans / usr / local / bin, il sera trouvé et exécuté sans avoir à fournir un chemin de dossier dans la ligne de commande ou à ajouter ./ au nom. Par exemple, j'ai créé le script bash simple sur 3 lignes suivant pour afficher les UUID de disque:

#!/bin/bash
echo "* UUIDs must match in /etc/fstab and /boot/grub/menu.lst"
sudo blkid

J'ai appelé le fichier uuid et l'ai placé dans / usr / local / bin. Tout ce dont j'ai besoin d'entrer sur la ligne de commande est:

uuid
fragos
la source
0

Eh bien, moi aussi j'ai rencontré le même problème. Je voulais exécuter le fichier .sh qui s’est ouvert avec Gedit sous CentOS 7. Voici ce que j’ai fait:

  1. Je naviguais sur le chemin du .shfichier que je voulais exécuter.
  2. J'ai ouvert le terminal.
  3. Et j'ai simplement fait glisser la fenêtre du terminal et elle a automatiquement pris ce fichier avec le chemin en entrée.
  4. Appuyez sur Entrée et vous êtes prêt à partir!
Jen Bates
la source
0

Le problème que j'ai trouvé sur quelques distributions est qu'elles ont masqué l'option de préférences dans Nautilus, mais le corriger dans Ubuntu et les autres distributions utilisant Gnome3 est identique comment à l'avenir).

  1. Installer dconf-editor

    sudo apt-get install dconf-editor
  2. Exécuter en dconf-editorutilisant le compte d'utilisateur sur lequel vous souhaitez activer cette fonctionnalité, c'est-à-dire PAS root

    dconf-editor
  3. Accédez au schéma suivant:

    org.gnome.nautilus.preferences

  4. Changez l'option par défaut pour ne pas ouvrir par défaut:

    Trouvez executable-text-activationcliquez sur le mot displayet changer pourask

cela vous donnera la possibilité d'éditer, d'afficher ou d'exécuter le fichier à l'avenir

Snider
la source
0

Je suis un noob sous Linux et je viens d'avoir le même problème. Si tout échoue:

  1. Terminal ouvert
  2. Ouvrez le dossier contenant le fichier .sh
  3. Glissez et déposez le fichier dans la fenêtre du terminal
  4. Le chemin du fichier apparaît dans le terminal. Appuyez sur Enter.
  5. Voilà, votre fichier .sh est lancé.
Linux_noob
la source
-2

Vous pouvez également utiliser des .astuces, avec la suggestion d'autres réponses.

Par exemple:

chmod +x filename.sh, en supposant que vous ayez déjà accédé au chemin du fichier, puis exécutez le fichier avec l’une des commandes suivantes:

sh filename.sh

./filename.sh

. filename.sh
Awais
la source
2
avertissement : ces trois commandes ne sont pas équivalentes. Si votre shebang fait référence à un autre binaire (comme Stack), la troisième commande essaiera d'analyser les arguments avec Bash, ce qui échouera.
Jezen Thomas