web-dev-qa-db-fra.com

Pourquoi certains serveurs nécessitent './' pour exécuter des scripts, mais pas d'autres?

Je me demande pourquoi certains serveurs Ubuntu sont différents.

J'ai deux serveurs Ubuntu 12.04 qui exécutent une application Web. Aujourd'hui, j'ai essayé d'exécuter un fichier sh à partir de son dossier. Le serveur 1 peut exécuter Shell sans ./ mais le serveur 2 l'exige. Les deux ont l'autorisation 777.

3
Batbayar

Normalement, les scripts/programmes du dossier actuel ne sont pas exécutés sur linux/unix.

Les scripts/programmes ne sont exécutés que lorsque le script/programme se trouve dans le $PATH variable.

Ainsi, lorsque le chemin n'est pas inclus dans le $PATH variable vous devez donner le chemin du script/programme pour l'exécuter. Pour exécuter un script/programme dans le dossier actuel, vous devez le précéder de ./ qui désigne le dossier currect.

Veuillez vérifier que le $PATH la variable sur les deux serveurs est la même.

Sur la base de votre commentaire sur le $PATH variable Je soupçonne que l'un des scripts se trouve dans un dossier trouvé par le $PATH variable alors que l'autre est dans un autre dossier.

Attention

C'est une mauvaise idée d'inclure ./ dans ton $PATH. De cette façon, un utilisateur peut créer une commande malveillante (telle que ls) et vous guider dans le dossier où il l'enregistre. Ensuite, vous exécuterez la version locale au lieu de la commande système (si le dossier actuel est placé dans $PATH avant /bin).

9
Uwe Plonus