web-dev-qa-db-fra.com

Comment exécuter un script Shell sans utiliser les commandes "sh" ou "bash"?

J'ai un script Shell que je veux exécuter sans utiliser les commandes "sh" ou "bash". Par exemple:

Au lieu de: sh script.sh

Je veux utiliser: script.sh

Comment puis-je faire ceci?

P.S. (i) Je n’utilise pas beaucoup le script Shell et j’ai essayé de lire sur les alias, mais je n’ai pas compris comment les utiliser.

(ii) J'ai aussi lu comment lier le script à un autre fichier dans les variables PATH. J'utilise mon serveur universitaire et je ne dispose pas des autorisations nécessaires pour créer un fichier à ces emplacements.

236
Rameez Hussain

Ajoutez un "Shebang" en haut de votre fichier:

#!/bin/bash

Et rendre votre fichier exécutable (chmod +x script.sh).

Enfin, modifiez votre chemin pour ajouter le répertoire dans lequel se trouve votre script:

export PATH=$PATH:/appropriate/directory

(vous voulez généralement $HOME/bin pour stocker vos propres scripts)

404
fge

Voici certaines des conditions préalables à l’utilisation directe du nom de script:

  1. Ajoutez la ligne she-bang (#!/bin/bash) tout en haut.
  2. Utiliser chmod u+x scriptname rend le script exécutable. (où scriptname est le nom de votre script)
  3. Placez le script dans le dossier /usr/local/bin.
  4. Exécutez le script en utilisant simplement le nom du script.

Note: La raison pour laquelle j'ai suggéré de le placer dans le dossier /usr/local/bin est parce que ce sera probablement le chemin déjà ajouté à votre PATH variable.

Mise à jour:

Si vous n'avez pas accès au dossier /usr/local/bin, procédez comme suit:

  1. Créez un dossier dans votre répertoire personnel et appelons-le myscripts.
  2. Faites ls -lart sur votre répertoire personnel pour identifier le script de démarrage utilisé par votre shell. Il devrait s'agir de .profile ou de .bashrc.
  3. Une fois que vous avez identifié le script de démarrage, ajoutez la ligne suivante dans votre script - export set PATH=$PATH:~/myscript.
  4. Une fois ajouté, sourcez votre script de démarrage ou déconnectez-vous et reconnectez-vous.
  5. Exécutez votre script avec scriptname.
64
jaypal singh

Assurez-vous simplement qu'il est exécutable, en utilisant chmod +x. Par défaut, le répertoire en cours ne se trouve pas sur votre CHEMIN. Vous devrez donc l'exécuter en tant que ./script.sh - ou le référencer par un chemin qualifié. Alternativement, si vous avez vraiment besoin que de script.sh, vous devez l’ajouter à votre CHEMIN. (Vous pouvez ne pas avoir accès à la modification du chemin système, mais vous pouvez certainement modifier le chemin PATH de votre propre environnement actuel.) Cela suppose également que votre script commence par quelque chose comme #!/bin/sh.

Vous pouvez également utiliser un alias, qui n'est pas vraiment lié aux scripts Shell, mais uniquement au shell, et qui est simple comme suit:

alias script.sh='sh script.sh'

Ce qui vous permettrait d'utiliser simplement script.sh (littéralement - cela ne fonctionnera pour aucun autre fichier *.sh) à la place de sh script.sh.

20
ziesemer

Dans cet exemple, le fichier s'appellera myShell

Tout d’abord, nous devrons créer ce fichier, nous pouvons simplement commencer en tapant ce qui suit:

Sudo nano myShell

Notez que nous n'avons pas mis l'extension .sh? En effet, lorsque nous le lancerons à partir du terminal, il ne faudra taper que myShell pour pouvoir exécuter notre commande!

Maintenant, en nano, la ligne supérieure DOIT être #!/bin/bash, alors vous pouvez laisser une nouvelle ligne avant de continuer.

Pour démonstration, je vais ajouter une réponse de base Hello World!

Donc, je tape ce qui suit:

echo Hello World!

Après cela, mon exemple devrait ressembler à ceci:

#!/bin/bash
echo Hello World!

Maintenant, enregistrez le fichier et ensuite exécutez cette commande:

Sudo chmod +x myShell

Maintenant que le fichier est exécutable, nous pouvons le déplacer vers /usr/bin/ à l'aide de la commande suivante:

Sudo cp myShell /usr/bin/

Juste pour nous assurer que la machine peut exécuter correctement, nous devrons redémarrer la machine

J'ai utilisé Sudo shutdown -r now

Félicitations! Notre commande est maintenant terminée! Dans le terminal, on peut taper myShell et il faut dire Hello World!

14
user8493486

Vous devez activer le bit exécutable pour le programme.

chmod +x script.sh

Ensuite, vous pouvez utiliser ./script.sh

Vous pouvez ajouter le dossier à la variable PATH dans votre fichier .bashrc (situé dans votre répertoire personnel). Ajoutez cette ligne à la fin du fichier:

export PATH=$PATH:/your/folder/here
13
Uku Loskit

Vous pouvez taper Sudo install (nom du script)/usr/local/bin/(ce que vous voulez taper pour exécuter ledit script)

ex: Sudo install quickcommit.sh /usr/local/bin/quickcommit entrer le mot de passe

peut maintenant fonctionner sans .sh et dans n'importe quel répertoire

6
JoelWass

Ajouter . (répertoire courant) à votre variable PATH.
Vous pouvez le faire en modifiant votre fichier .profile.
insère la ligne suivante dans votre fichier .profile
PATH=$PATH:.

Assurez-vous simplement d'ajouter Shebang (#!/bin/bash) au début de votre script et de le rendre exécutable (à l'aide de chmod +x <File Name>).

3
Arpit Tyagi

Juste:

/path/to/file/my_script.sh
0
DimiDak

Voici mon script de sauvegarde qui vous donnera l'idée et l'automatisation:

Serveur: Ubuntu 16.04 PHP: 7.0 Apache2, Mysql etc ...

# Make Shell Backup Script - Bash Backup Script
    nano /home/user/bash/backupscript.sh
        #!/bin/bash
        # Backup All Start
        mkdir /home/user/backup/$(date +"%Y-%m-%d")
        Sudo Zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_rest.Zip /etc -x "*Apache2*" -x "*php*" -x "*mysql*"
        Sudo Zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_Apache2.Zip /etc/Apache2
        Sudo Zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_php.Zip /etc/php
        Sudo Zip -ry /home/user/backup/$(date +"%Y-%m-%d")/etc_mysql.Zip /etc/mysql
        Sudo Zip -ry /home/user/backup/$(date +"%Y-%m-%d")/var_www_rest.Zip /var/www -x "*html*"
        Sudo Zip -ry /home/user/backup/$(date +"%Y-%m-%d")/var_www_html.Zip /var/www/html
        Sudo Zip -ry /home/user/backup/$(date +"%Y-%m-%d")/home_user.Zip /home/user -x "*backup*"
        # Backup All End
        echo "Backup Completed Successfully!"
        echo "Location: /home/user/backup/$(date +"%Y-%m-%d")"

    chmod +x /home/user/bash/backupscript.sh
    Sudo ln -s /home/user/bash/backupscript.sh /usr/bin/backupscript

changez/home/user dans votre répertoire utilisateur et tapez: backupscript n'importe où sur le terminal pour exécuter le script! (en supposant que/usr/bin est sur votre chemin)

0
Tarik

Entrez "#!/bin/sh" avant le script. Puis enregistrez-le sous script.sh par exemple. copiez-le dans $HOME/bin ou $HOME/usr/bin
Le répertoire peut être différent sur différentes distributions Linux, mais elles se terminent par 'bin' et se trouvent dans le répertoire de base cd $HOME/bin ou $HOME/usr/bin
Type chmod 700 script.sh
Et vous pouvez l’exécuter simplement en tapant run.sh sur le terminal. Si cela ne fonctionne pas, essayez chmod +x run.sh au lieu de chmod 700 run.sh

0
Gyan Prakash