README | 4 ++-- run.go | 35 +++++------------------------------ diff --git a/README b/README index 7d88ba0f471835f6d6e73cd92fc5ac2ac240104d528f0997cce0f09b0659288d..07c5dbfd693cc5fbd4a5876a409f6c5bf46d2521cc82dcf14479b2e37e4e0d9d 100644 --- a/README +++ b/README @@ -31,9 +31,9 @@ * empty targets are considered always out of date * .do's arguments are relative paths * .do search goes up to / by default, but can be limited with either REDO_TOP_DIR environment variable, or by having .redo/top file in it -* executable .do is run as is -* shebangless .do is run with /bin/sh -e[x] * target's completion messages are written after they finish +* executable .do is run as is, non-executable is run with /bin/sh -e[x] +* tracing (-x) can be done only for non-executable .do FEATURES *goredo-features* diff --git a/run.go b/run.go index 81366c0d76642587ce991f1a913a71dbf5afc8afd1dd0ae6d89eadea91eda422..32c28f3deadb87a37aed0081bbf3e0cc1585b982e02b16688151c7b220890627 100644 --- a/run.go +++ b/run.go @@ -63,7 +63,7 @@ StderrSilent bool = false StderrPrefix string Jobs sync.WaitGroup - flagTrace = flag.Bool("x", false, fmt.Sprintf("trace current target (sh -x) (set %s=1 for others too)", EnvTrace)) + flagTrace = flag.Bool("x", false, fmt.Sprintf("trace current target (sh -x) (set %s=1 for all others)", EnvTrace)) flagStderrKeep = flag.Bool("logs", false, fmt.Sprintf("keep job's stderr (%s=1)", EnvStderrKeep)) flagStderrSilent = flag.Bool("silent", false, fmt.Sprintf("do not print job's stderr (%s=1)", EnvStderrSilent)) ) @@ -303,39 +303,14 @@ // Prepare command line var cmdName string var args []string if err = unix.Access(doFilePath, unix.X_OK); err == nil { - // Ordinary executable file cmdName = doFilePath args = make([]string, 0, 3) } else { - fd, err := os.Open(doFilePath) - if err != nil { - cleanup() - return TgtErr{tgtOrig, err} - } - buf := make([]byte, 512) - n, err := fd.Read(buf) - if err != nil { - cleanup() - return TgtErr{tgtOrig, err} - } - if n > 3 && string(buf[:3]) == "#!/" { - // Shebanged - t := string(buf[2:n]) - nlIdx := strings.Index(t, "\n") - if nlIdx == -1 { - cleanup() - return TgtErr{tgtOrig, errors.New("not fully read shebang")} - } - args = strings.Split(t[:nlIdx], " ") - cmdName, args = args[0], args[1:] + cmdName = "/bin/sh" + if traced { + args = append(args, "-ex") } else { - // Shell - cmdName = "/bin/sh" - if traced { - args = append(args, "-ex") - } else { - args = append(args, "-e") - } + args = append(args, "-e") } args = append(args, doFile) }