Maison > développement back-end > Golang > le corps du texte

Analyse exécutable de exec.Command + PATH

PHPz
Libérer: 2024-02-09 08:03:27
avant
708 Les gens l'ont consulté

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")
Copier après la connexion

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
Copier après la connexion

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

exec: "theexecutable": executable file not found in $path
Copier après la connexion

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

cmdwhich := exec.command("which", "theexecutable")
Copier après la connexion

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")
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal