aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-06-20 01:31:07 +0900
committerOphestra <cat@gensokyo.uk>2026-06-20 01:31:07 +0900
commit4892beefc18d409dcb99b27e0980df4537cad692 (patch)
tree7047e1a0ab668298154a4453f3235e6faf494012
parent7ab54b8c94df425e541b0ee00b871a9c7d0dc64e (diff)
cmd/app: optionally override configured command
Useful for multiple applications sharing state. Signed-off-by: Ophestra <cat@gensokyo.uk>
-rw-r--r--cmd/app/app.go2
-rw-r--r--cmd/app/app_test.go2
-rw-r--r--cmd/app/main.go94
3 files changed, 56 insertions, 42 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()
+ config, err = parse(args[0], base, r)
+ if closeErr := f.Close(); err == nil {
+ err = closeErr
+ }
+ if common != nil {
+ if closeErr := common.Close(); err == nil {
+ err = closeErr
+ }
+ }
+ if err != nil {
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 {
- err = closeErr
+ if flagCommand != "" {
+ config.Container.Args[2] = flagCommand
}
- }
- if err != nil {
- return err
- }
- return run(ctx, msg, config)
- },
- )
+ 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 {