J'exécute une application CLI et j'utilise os.UserHomeDir func pour enregistrer certains fichiers, elle renvoie quelque chose comme ceci: /home/victor/.rit, mais lorsque j'exécute une commande avec sudo, elle renvoie: /root/.rit/ , je veux avoir la même adresse, avec sudo ou pas, il y a un moyen de faire ça avec go?

1
Victor Schumacher 3 sept. 2020 à 16:11

2 réponses

Meilleure réponse

Si votre programme Go doit s'exécuter avec sudo, vous pouvez trouver l'identité de l'utilisateur d'origine avant sudo via:

username := os.Getenv("SUDO_USER")

Alors vous pouvez rechercher leurs informations d'utilisateur:

import "os/user"

u, err := user.Lookup(username)
if err != nil {
    log.Fatal(err)
}
fmt.Println("user home:", u.HomeDir)
5
colm.anseo 3 sept. 2020 à 13:34

Il se comporte correctement: sudo exécute une commande en tant qu'utilisateur différent, le répertoire personnel de root est /root. Donc, si vous utilisez sudo pour exécuter votre programme en tant que root, le répertoire personnel de l'utilisateur actuel est /root. Si vous voulez un répertoire différent, vous devez l'accepter comme paramètre CLI, par exemple en utilisant le flag package.

1
Adrian 3 sept. 2020 à 13:29