277 votes

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

J'ai un shell script 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 le faire ?

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

(ii) J'ai également lu qu'il fallait lier le script avec un autre fichier dans les variables PATH. J'utilise le serveur de mon université et je n'ai pas les autorisations nécessaires pour créer un fichier à ces emplacements.

1 votes

Les réponses indiquent comment rendre le script exécutable, mais ne semblent pas couvrir comment le rendre accessible. Pour cela, créez vous-même un répertoire bin - $HOME/bin - si vous n'en avez pas déjà un, ajoutez-le à votre PATH (près du début). Mettez les scripts (et tout autre programme) que vous voulez exécuter directement sans spécifier le nom du chemin ici, ou des liens symboliques ici vers l'endroit où se trouvent les programmes réels.

1 votes

Après avoir suivi la ou les réponses ci-dessous, pour supprimer le ".sh", vous pouvez renommer le fichier : mv example.sh example et ensuite example devrait fonctionner par lui-même.

6voto

JoelWass Points 417

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 être exécuté sans .sh et dans n'importe quel répertoire

0 votes

... A condition que vous vous soyez également assuré au préalable que le fichier soit lisible et exécutable par tous. chmod a+x quickcommit.sh

1voto

Arpit Tyagi Points 61

Ajoutez . (répertoire actuel) à votre variable PATH.
Vous pouvez le faire en modifiant votre fichier .profile.
Mettez la ligne suivante dans votre fichier .profile
PATH=$PATH:.

Assurez-vous simplement d'ajouter Shebang ( #!/bin/bash ) au début de votre script et rendez le script exécutable (en utilisant la commande chmod +x <File Name> ).

1 votes

Ne faites pas ça. Il y a de bonnes raisons de pas avoir le répertoire courant sur votre PATH . Il est trop facile - surtout pour les débutants - de masquer accidentellement des commandes système cruciales ou, pire encore, de se faire piéger en exécutant les commandes de quelqu'un d'autre.

0voto

Tarik Points 2174

Voici mon script de secours 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

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

0voto

Gyan Prakash Points 53

Entrez "#!/bin/sh" avant script. Ensuite, enregistrez-le en tant que script.sh par exemple. le copier sur $HOME/bin ou $HOME/usr/bin
Le répertoire peut être différent sur différentes distros linux mais il se termine par 'bin' et sont dans le répertoire personnel cd $HOME/bin ou $HOME/usr/bin
Type chmod 700 script.sh
Et vous pouvez l'exécuter juste 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 votes

Les parties de cette réponse qui ne reprennent pas des informations provenant de réponses existantes très anciennes sont confuses.

0voto

Guru Points 1

Rendre n'importe quel fichier exécutable


Disons que vous avez un fichier exécutable appelé migrate_linux_amd64 et que vous voulez exécuter ce fichier en tant que commande comme "migrate".

  1. Testez d'abord le fichier exécutable à partir de l'emplacement du fichier :

    [oracle@localhost]$ ./migrate.linux-amd64 Usage: migrate OPTIONS COMMAND [arg...] migrate [ -version | -help ]

    Options: -source Location of the migrations (driver://url) -path Shorthand for -source=file://path -database Run migrations against this database (driver://url) -prefetch N Number of migrations to load in advance before executing (default 10) -lock-timeout N Allow N seconds to acquire database lock (default 15) -verbose Print verbose logging -version Print version -help Print usage

    Commands: goto V Migrate to version V up [N] Apply all or N up migrations down [N] Apply all or N down migrations drop Drop everyting inside database force V Set version V but don't run migration (ignores dirty state) version Print current migration version

  2. Assurez-vous que vous avez les privilèges d'exécution sur le fichier
    -rwxr-xr-x 1 oracle oinstall 7473971 May 18 2017 migrate.linux-amd64
    sinon, exécutez chmod +x migrate.linux-amd64

  3. Ensuite, copiez votre fichier dans /usr/local/bin . Ce répertoire est la propriété de Root, utilisez sudo ou passez à Root et effectuez l'opération suivante

    sudo cp migrate.linux-amd64 /usr/local/bin sudo chown oracle:oracle /user/local/bin/migrate.linux.amd64

  4. Ensuite, créez un lien symbolique comme ci-dessous

    sudo ln /usr/local/bin/migrate.linux.amd64 /usr/local/bin/migrate sudo chown oracle:oracle /usr/local/bin/migrate

  5. Enfin, ajoutez /usr/local/bin à votre chemin ou profil utilisateur

    export PATH = $PATH:/usr/local/bin

  6. Ensuite, exécutez la commande comme "migrate"

    [oracle@localhost]$ migrate Usage: migrate OPTIONS COMMAND [arg...] migrate [ -version | -help ]

    Options: -source Location of the migrations (driver://url) -path Shorthand for -source=file://path -database Run migrations against this database (driver://url) -prefetch N Number of migrations to load in advance before executing (default 10) -lock-timeout N Allow N seconds to acquire database lock (default 15) -verbose Print verbose logging -version Print version -help Print usage

    Commands: goto V Migrate to version V up [N] Apply all or N up migrations down [N] Apply all or N down migrations drop Drop everyting inside database force V Set version V but don't run migration (ignores dirty state) version Print current migration version

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X