2016-07-20 13 views
0

Ich suche etwas in Go, wo ich den Benutzer in eine andere Shell bei der Anmeldung starten. Also diese App wird einige Arbeit bei der Anmeldung tun und dann den Benutzer in eine Bash-Shell fallen lassen und dann beim Beenden mehr Arbeit machen und dann beenden. Ich kann es nicht in eine Schale bringen.Go: Wie man eine Bash Shell erzeugt

package main 

import (
    "fmt" 
    "os/exec" 
) 

func main() { 
    proc := exec.Command("/bin/bash") 
    out, e := proc.StdoutPipe() 
    proc.Start() 
    fmt.Println("Ran a shell in go") 

    fmt.Println(out) 
    fmt.Println(e) 
} 

Das geht einfach gleich.

+0

Ich muss zugeben, ich verstehe das Problem nicht vollständig. Du brauchst eine neue Shell in der Shell? Wenn ich richtig verstehe, könnte etwas wie die folgenden helfen: 'syscall.Exec (os.Getenv (" SHELL "), [] string {os.Getenv (" SHELL ")}, syscall.Environ()) ' – noisewaterphd

Antwort

1

Ich muss zugeben, ich verstehe das Problem nicht vollständig. Du brauchst eine neue Shell in der Shell?

Wenn ich richtig verstehe, so etwas wie die folgenden helfen könnten:

syscall.Exec(os.Getenv("SHELL"), []string{os.Getenv("SHELL")}, syscall.Environ())

+0

' Exec() 'ersetzt * den Go-Prozess mit einer Shell. Das ist nicht gewöhnlich, was Leute meinen, wenn sie sagen, dass sie ein Programm laufen lassen wollen. –

2

Go figure .. es herausfinden, nachdem ich posten, aber hier ist es, was

arbeitete
package main 

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

func main() { 
    shell := exec.Command("/bin/bash") 
    shell.Stdout = os.Stdout 
    shell.Stdin = os.Stdin 
    shell.Stderr = os.Stderr 
    shell.Run() 
    fmt.Println("Ran a shell in go") 

}