From 4892beefc18d409dcb99b27e0980df4537cad692 Mon Sep 17 00:00:00 2001 From: Ophestra Date: Sat, 20 Jun 2026 01:31:07 +0900 Subject: [PATCH] cmd/app: optionally override configured command Useful for multiple applications sharing state. Signed-off-by: Ophestra --- cmd/app/app.go | 2 +- cmd/app/app_test.go | 2 +- cmd/app/main.go | 98 ++++++++++++++++++++++++++------------------- 3 files changed, 58 insertions(+), 44 deletions(-) diff --git a/cmd/app/app.go b/cmd/app/app.go index 7dd8b651..205a0342 100644 --- a/cmd/app/app.go +++ b/cmd/app/app.go @@ -80,7 +80,7 @@ func parse(id string, base *check.Absolute, r io.Reader) (*hst.Config, error) { Shell: shell, Home: home, Path: shell, - Args: []string{"zsh", "-c"}, + Args: []string{"zsh", "-ic"}, Flags: hst.FCoverRun, }, diff --git a/cmd/app/app_test.go b/cmd/app/app_test.go index 10593607..76bce4c3 100644 --- a/cmd/app/app_test.go +++ b/cmd/app/app_test.go @@ -118,7 +118,7 @@ talk com.canonical.Unity Home: hst.AbsPrivateTmp.Append("home"), Path: fhs.AbsRoot.Append("bin", "zsh"), Args: []string{ - "zsh", "-c", + "zsh", "-ic", "exec Discord --ozone-platform-hint=wayland", }, diff --git a/cmd/app/main.go b/cmd/app/main.go index 07c2cdb8..d937ceac 100644 --- a/cmd/app/main.go +++ b/cmd/app/main.go @@ -141,57 +141,71 @@ func main() { ) } - c.NewCommand( - "run", "Start the named application", - func(args []string) error { - if len(args) != 1 { - dents, err := os.ReadDir(base.Append("app").String()) + { + var ( + flagCommand string + ) + c.NewCommand( + "run", "Start the named application", + func(args []string) error { + if len(args) != 1 { + dents, err := os.ReadDir(base.Append("app").String()) + if err != nil { + return err + } + for _, dent := range dents { + if dent.IsDir() { + continue + } + fmt.Println(dent.Name()) + } + return nil + } + + var config *hst.Config + var r io.Reader + f, err := os.Open(base.Append("app", args[0]).String()) if err != nil { return err } - for _, dent := range dents { - if dent.IsDir() { - continue + r = f + + var common *os.File + if common, err = os.Open(base.Append("common").String()); err != nil { + if !errors.Is(err, os.ErrNotExist) { + _ = f.Close() + return err } - fmt.Println(dent.Name()) + } else { + r = io.MultiReader(f, common) } - return nil - } - var config *hst.Config - var r io.Reader - f, err := os.Open(base.Append("app", args[0]).String()) - if err != nil { - return err - } - r = f - - var common *os.File - if common, err = os.Open(base.Append("common").String()); err != nil { - if !errors.Is(err, os.ErrNotExist) { - _ = f.Close() - return err - } - } else { - r = io.MultiReader(f, common) - } - - config, err = parse(args[0], base, r) - if closeErr := f.Close(); err == nil { - err = closeErr - } - if common != nil { - if closeErr := common.Close(); err == nil { + config, err = parse(args[0], base, r) + if closeErr := f.Close(); err == nil { err = closeErr } - } - if err != nil { - return err - } + if common != nil { + if closeErr := common.Close(); err == nil { + err = closeErr + } + } + if err != nil { + return err + } - return run(ctx, msg, config) - }, - ) + if flagCommand != "" { + config.Container.Args[2] = flagCommand + } + + return run(ctx, msg, config) + }, + ). + Flag( + &flagCommand, + "command", command.StringFlag(""), + "Override configured command", + ) + } c.MustParse(os.Args[1:], func(err error) { if e, ok := errors.AsType[*exec.ExitError](err); ok && e != nil {