package main import ( "io/ioutil" "os" "os/exec" "strings" "time" "go.wit.com/log" ) func doInteract() error { for { filename, err := doEditorOnce() if err != nil { return err } log.Info("filename:", filename) for { _, err := os.Stat("/tmp/regex.ready") if err == nil { break } time.Sleep(100 * time.Millisecond) } // read in regex.ready exists (should be SessionID) // Println session ID content, err := ioutil.ReadFile("/tmp/regex.ready") if err != nil { log.Error(err) } os.Remove("/tmp/regex.ready") log.Info("SessionID: %s", string(content)) logContent, err := ioutil.ReadFile("/tmp/regex.log") if err != nil { log.Errorf("could not read regex.log: %v", err) } else { log.Info("contents of /tmp/regex.log:") os.Stdout.Write(logContent) } time.Sleep(5 * time.Second) } } func doEditorOnce() (string, error) { // Create a temporary file tmpfile, err := ioutil.TempFile("", "regex-*.txt") if err != nil { return "", err } tmpPath := tmpfile.Name() // Defer removal in case of error, but we might move it defer os.Remove(tmpPath) tmpfile.Close() // Get the user's editor editor := os.Getenv("EDITOR") if editor == "" { editor = "vim" // default to vim } // Run the editor cmd := exec.Command(editor, tmpPath) cmd.Stdin = os.Stdin cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { return "", err } // Read the file content content, err := ioutil.ReadFile(tmpPath) if err != nil { return "", err } // Check if the file is not empty after trimming space if strings.TrimSpace(string(content)) != "" { // Move the file if err := os.Rename(tmpPath, "/tmp/regex.txt"); err != nil { return "", err } return "/tmp/regex.txt", nil } return "", nil }