coreutils.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package shell
  2. import (
  3. "context"
  4. "github.com/u-root/u-root/pkg/core"
  5. "github.com/u-root/u-root/pkg/core/cat"
  6. "github.com/u-root/u-root/pkg/core/chmod"
  7. "github.com/u-root/u-root/pkg/core/cp"
  8. "github.com/u-root/u-root/pkg/core/find"
  9. "github.com/u-root/u-root/pkg/core/ls"
  10. "github.com/u-root/u-root/pkg/core/mkdir"
  11. "github.com/u-root/u-root/pkg/core/mv"
  12. "github.com/u-root/u-root/pkg/core/rm"
  13. "github.com/u-root/u-root/pkg/core/touch"
  14. "github.com/u-root/u-root/pkg/core/xargs"
  15. "mvdan.cc/sh/v3/interp"
  16. )
  17. var coreUtils = map[string]func() core.Command{
  18. "cat": func() core.Command { return cat.New() },
  19. "chmod": func() core.Command { return chmod.New() },
  20. "cp": func() core.Command { return cp.New() },
  21. "find": func() core.Command { return find.New() },
  22. "ls": func() core.Command { return ls.New() },
  23. "mkdir": func() core.Command { return mkdir.New() },
  24. "mv": func() core.Command { return mv.New() },
  25. "rm": func() core.Command { return rm.New() },
  26. "touch": func() core.Command { return touch.New() },
  27. "xargs": func() core.Command { return xargs.New() },
  28. }
  29. func (s *Shell) coreUtilsHandler() func(next interp.ExecHandlerFunc) interp.ExecHandlerFunc {
  30. return func(next interp.ExecHandlerFunc) interp.ExecHandlerFunc {
  31. return func(ctx context.Context, args []string) error {
  32. if len(args) == 0 {
  33. return next(ctx, args)
  34. }
  35. program, programArgs := args[0], args[1:]
  36. newCoreUtil, ok := coreUtils[program]
  37. if !ok {
  38. return next(ctx, args)
  39. }
  40. c := interp.HandlerCtx(ctx)
  41. cmd := newCoreUtil()
  42. cmd.SetIO(c.Stdin, c.Stdout, c.Stderr)
  43. cmd.SetWorkingDir(c.Dir)
  44. cmd.SetLookupEnv(func(key string) (string, bool) {
  45. v := c.Env.Get(key)
  46. return v.Str, v.Set
  47. })
  48. return cmd.RunContext(ctx, programArgs...)
  49. }
  50. }
  51. }