os.Clearenv în Go

Șterge toate variabilele de mediu ale procesului curent.

Sintaxă
func Clearenv()

Ce face os.Clearenv

os.Clearenv golește complet mediul procesului: după apel, os.Environ() returnează o listă goală. Procesele copil pornite după aceea primesc și ele un mediu gol (dacă nu setezi cmd.Env).

Atenție: și PATH dispare, așa că exec.Command("ls") nu mai găsește programele după nume. Funcția e utilă rar, de exemplu înainte de a rula ceva într-un mediu controlat.

Ce returnează

Nimic.

Exemple

Exemplul 1: Înainte și după

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Println("are variabile:", len(os.Environ()) > 0)
    os.Clearenv()
    fmt.Println("după Clearenv:", len(os.Environ()))
    fmt.Printf("HOME = %q\n", os.Getenv("HOME"))
}

Rezultat

are variabile: true
după Clearenv: 0
HOME = ""

Exemplul 2: Procesul copil primește mediul gol

Fără PATH folosim calea completă /bin/sh.

package main

import (
    "fmt"
    "os"
    "os/exec"
)

func main() {
    os.Clearenv()
    os.Setenv("SALUT", "Bună")
    iesire, err := exec.Command("/bin/sh", "-c", `echo "$SALUT [HOME=$HOME]"`).Output()
    fmt.Print(string(iesire))
    fmt.Println("eroare:", err)

    _, err = exec.LookPath("sh")
    fmt.Println("LookPath fără PATH:", err)
}

Rezultat

Bună [HOME=]
eroare: <nil>
LookPath fără PATH: exec: "sh": executable file not found in $PATH

Greșeli frecvente

  • Apelezi Clearenv și apoi pornești programe după nume. Fără PATH nu sunt găsite.

Comenzi înrudite

  • os.Environ: Returnează toate variabilele de mediu, ca o listă de texte de forma NUME=valoare.
  • os.Setenv: Setează o variabilă de mediu pentru programul curent; Unsetenv o șterge.
  • exec.LookPath: Caută un program executabil în directoarele din PATH și returnează calea lui.