Question Un moyen d'éviter le pointillé lors de l'exécution de scripts exécutables dans bash?


Disons que j'ai un script.

chmod +x myscript

Maintenant pour courir ça je vais

./myscript

Mais y a-t-il un moyen de le faire en tapant

myscript

???


4
2017-07-24 20:21


origine


Quel OS (distribution) utilisez-vous? - ctrl-alt-delor


Réponses:


J'ai eu le même problème et semble ne pas avoir de réponse jusqu'à maintenant répond clairement à la question.

La solution à la question est d'ajouter export PATH=.:$PATH à ton .bash_profile. Cela inclura le répertoire actuel dans le chemin de recherche Unix pendant qu'il recherche la commande. Il est également sage de vous informer sur le risques de sécurité de le faire.


4
2017-10-18 11:20



Je pourrais suggérer de mettre "." à la fin plutôt qu'au début du PATH. Au moins aiderait avec les collisions de noms. À votre santé. - pythonlarry


Ajoutez le chemin du répertoire où se trouve votre script à la variable PATH:

export PATH=$PATH:/path/to/directory

4
2017-07-24 20:28





export PATH=/path_to_folder_containing_executable/:$PATH

Si vous ne voulez pas exécuter cela chaque fois que vous ouvrez un nouveau terminal, vous pouvez toujours ajouter cette ligne dans votre ~/.bashrc.

Bonne chance!


1
2017-07-24 22:31





créer un lien symbolique du fichier script dans n'importe quel / bin /, / usr / bin etc.

ln -s /path_to_script/myscript /usr/bin/myscript 

1
2017-07-25 04:54





Mettez le script dans ~/bin, une bin répertoire dans votre répertoire personnel. Alors vérifie ça ~/bin est ajouté à votre PATH. C'est peut-être déjà le cas (même si vous devez vous déconnecter et vous reconnecter).

Vous pouvez changer votre PATH pour inclure ., mais c'est dangereux. Cela peut entraîner des problèmes de sécurité. PAR EXEMPLE.

Le plus évident. Si vous définissez PATH pour regarder . d'abord: alors si un répertoire a a un fichier exécutable ls ça fait quelque chose de mal. Ensuite, vous tapez cd a; ls. Alors quelque chose de mauvais arrive.

Je ne peux que me souvenir d'un cas pratique. Si vous définissez PATH pour regarder . last: Vous faites ensuite un programme appelé test, quand vous l'exécutez, rien ne semble se produire (c'est parce qu'il exécute un test qui a une priorité plus élevée et qui n’a pas de sortie, juste un code de sortie). Il peut aussi y avoir un problème, si un nouveau logiciel est installé, ce nouveau logiciel peut masquer votre programme (bien que celui-ci ne soit pas différent de ~/bin à la fin de PATH).

Je dois créer des répertoires chez moi: ~/bin à la fin de PATH et ~/bin/override au début de PATH. ~ / bin / override` est principalement vide.


0
2017-07-24 21:11



La raison pour laquelle un programme dans votre PATH est nommé test ne fonctionne pas parce que test est aussi le nom d'un shell intégré. - garyjohn
@garyjohn oui vous voyez pourquoi cela peut être un problème. - ctrl-alt-delor


Toutes les autres réponses postées avant celle-ci sont correctes. (Bien que ceux qui ne mentionnent pas ~/.bashrc sont incomplets à cet égard.) Mais si vous préférez ne pas les utiliser, voici une alternative:

Type:

alias myscript="/path_to_folder_containing_executable/myscript"

ou

myscript() { /path_to_folder_containing_executable/myscript "$@"; }

Le second (appelé "fonction shell") peut être saisi

myscript() {
        /path_to_folder_containing_executable/myscript "$@"
}

si tu préfères. Tous définissent myscript être un type de commande spécial qui est vérifié avant que le shell regarde $PATH.

Comme le export commandes dans les autres réponses, ceux-ci n'affectent que la session shell en cours. Pour que l'effet persiste, placez la commande dans votre ~/.bashrc.


0
2017-07-25 04:11