diff --git a/pkg/core/cli_command.go b/pkg/core/cli_command.go index b50b0e0..eeee533 100644 --- a/pkg/core/cli_command.go +++ b/pkg/core/cli_command.go @@ -3,6 +3,7 @@ package core import ( "errors" "flag" + "io" "fmt" "os" "reflect" @@ -75,11 +76,9 @@ func (c *Command) setApp(app *CliApp) { // parseFlags parses the given flags func (c *Command) parseFlags(args []string) error { // Parse flags - tmp := os.Stderr - os.Stderr = nil - defer func() { - os.Stderr = tmp - }() + // Suppress flag parse errors to stderr + + c.flags.SetOutput(io.Discard) // Credit: https://stackoverflow.com/a/74146375 var positionalArgs []string diff --git a/pkg/core/core.go b/pkg/core/core.go index 3c5c181..ae2abca 100644 --- a/pkg/core/core.go +++ b/pkg/core/core.go @@ -33,6 +33,7 @@ func New(opts ...Option) (*Core, error) { io: defaultIO, etc: NewEtc(), crash: NewCrashHandler(), + cli: NewCliApp("", "", ""), svc: newServiceManager(), } c.bus = newMessageBus(c) diff --git a/pkg/core/mnt_extract.go b/pkg/core/mnt_extract.go index 21188e3..e882bb4 100644 --- a/pkg/core/mnt_extract.go +++ b/pkg/core/mnt_extract.go @@ -135,11 +135,12 @@ func Extract(fsys fs.FS, targetDir string, data any, opts ...ExtractOptions) err // Copy standard files for _, path := range standardFiles { + targetPath := path name := filepath.Base(path) if renamed := opt.RenameFiles[name]; renamed != "" { - path = filepath.Join(filepath.Dir(path), renamed) + targetPath = filepath.Join(filepath.Dir(path), renamed) } - target := renderPath(filepath.Join(targetDir, path), data) + target := renderPath(filepath.Join(targetDir, targetPath), data) if err := copyFile(fsys, path, target); err != nil { return err }