Maison  >  Article  >  développement back-end  >  Analyse exécutable de exec.Command + PATH

Analyse exécutable de exec.Command + PATH

PHPz
PHPzavant
2024-02-09 08:03:27657parcourir

exec.Command + PATH 的可执行解析

l'éditeur php Yuzai vous présente aujourd'hui un problème clé lié à exec.Command et PATH - l'analyse des exécutables. En PHP, la fonction exec.Command est l'une des fonctions couramment utilisées pour exécuter des commandes externes, et PATH est la variable d'environnement système utilisée pour spécifier le répertoire dans lequel le système recherche les fichiers exécutables. Lorsque vous utilisez la fonction exec.Command pour exécuter des commandes externes, vous rencontrez parfois le problème que le fichier exécutable est introuvable. Dans ce cas, vous devez définir correctement le PATH pour vous assurer que le système peut résoudre correctement le chemin du fichier exécutable. . Ci-dessous, nous verrons en détail comment définir correctement PATH, ainsi que les problèmes et solutions d'analyse courants.

Le contenu de la question

a un appel de commande très similaire

cmddirect := exec.command("theexecutable")
cmdshell := exec.command(os.getenv("shell"),  "-c",  "theexecutable")

Les deux ont les mêmes paramètres d'environnement

envwithpath := append(os.environ(), fmt.sprintf("path=/real/existing/path/to/theexecutable/holder:%s", os.getenv("path")))

cmddirect.env = envwithpath
cmdshell.env = envwithpath

Bien que cmdshell 按预期工作良好,但 cmddirect ait échoué

exec: "theexecutable": executable file not found in $path

Pour exactement la même configuration d'environnement mentionnée, l'appel réussit également

cmdwhich := exec.command("which", "theexecutable")

Retournez correctement /real/existing/path/to/theexecutable/holder/theexecutable

Alors quelle est la raison de cette différence ?

P.S. Les deux méthodes ont définitivement les mêmes paramètres $path. Par exemple

exec.Command("env")
exec.Command(os.GetEnv("SHELL"),  "-c",  "env")

Les deux produisent la même path=.... séquence

Merci

Solution de contournement

exec.Command 使用 exec.LookPath Trouvez le chemin d'accès à l'exécutable en utilisant votre PATH au lieu du chemin défini sur cmd.

Si vous souhaitez trouver un exécutable spécifique de manière plus fiable (ou générer un sous-shell), je vous recommande de définir Cmd.Path sur le chemin d'accès à l'exécutable.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer