diff options
| author | Jeff Carr <[email protected]> | 2025-02-12 15:11:29 -0600 | 
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-02-12 15:11:29 -0600 | 
| commit | d70cf82ecc02c5be472c87e2923fab7188f2cdbd (patch) | |
| tree | c9c2a1c929e4eb965fe1edcb898159dd7bec3711 | |
| parent | 364d666eb6918ac30eae6379ae18fa91879de459 (diff) | |
sudo with pseudo ttyv0.22.25
| -rw-r--r-- | exec.go | 56 | 
1 files changed, 56 insertions, 0 deletions
@@ -2,8 +2,10 @@ package shell  import (  	"errors" +	"fmt"  	"os"  	"os/exec" +	"syscall"  	"go.wit.com/log"  ) @@ -46,3 +48,57 @@ func ExecCheck(args []string) error {  	// log.Info("ExecCheck() nil")  	return nil  } + +func SudoRaw(c []string) { +	args := []string{"-S"} +	args = append(args, c...) +	cmd := exec.Command("sudo", args...) + +	// Assign the current process's standard input, output, and error +	cmd.Stderr = os.Stderr +	cmd.Stdout = os.Stdout +	cmd.Stdin = os.Stdin + +	// Ensure the process has a terminal session +	cmd.SysProcAttr = &syscall.SysProcAttr{ +		Setsid: true, // Start a new session +	} + +	err := cmd.Run() +	if err != nil { +		fmt.Println("Command execution failed:", err) +	} +} + +func Sudo(c []string) error { +	args := []string{"-S"} +	// args := []string{} +	args = append(args, c...) +	cmd := exec.Command("sudo", args...) + +	// Open the terminal device directly to preserve input/output control +	tty, err := os.OpenFile("/dev/tty", os.O_RDWR, 0) +	if err != nil { +		fmt.Println("Failed to open /dev/tty:", err) +		return err +	} +	defer tty.Close() + +	// Assign the TTY explicitly +	cmd.Stdin = tty +	cmd.Stdout = tty +	cmd.Stderr = tty + +	// Ensure the new process gets its own session +	cmd.SysProcAttr = &syscall.SysProcAttr{ +		Setsid: true, // Start a new session +	} + +	// Run the command +	if err := cmd.Run(); err != nil { +		fmt.Println("Command execution failed:", err) +	} + +	fmt.Println("\nProcess finished. TTY restored.") +	return nil +}  | 
