Fixed arg order of os bang
All checks were successful
Build / build (push) Successful in 3m24s

This commit is contained in:
Leon Mika 2026-09-08 20:47:47 +10:00
parent e1b53f8bea
commit 2568dc45c2
2 changed files with 19 additions and 11 deletions

View file

@ -94,23 +94,28 @@ func (oh osHandlers) exec(ctx context.Context, args ucl.CallArgs) (any, error) {
func (oh osHandlers) bang(ctx context.Context, args ucl.CallArgs) (any, error) { func (oh osHandlers) bang(ctx context.Context, args ucl.CallArgs) (any, error) {
var ( var (
cmdStr string cmdStr string
stdIn string
hasStdin bool
) )
if args.NArgs() == 1 {
if err := args.Bind(&cmdStr); err != nil { if err := args.Bind(&cmdStr); err != nil {
return nil, err return nil, err
} }
} else {
if err := args.Bind(&stdIn, &cmdStr); err != nil {
return nil, err
}
hasStdin = true
}
cmd, err := oh.provider.ExecBang(ctx, cmdStr) cmd, err := oh.provider.ExecBang(ctx, cmdStr)
if err != nil { if err != nil {
return nil, err return nil, err
} }
if args.NArgs() > 0 { if hasStdin {
var stdin string cmd.Stdin = strings.NewReader(stdIn)
if err := args.Bind(&stdin); err != nil {
return nil, err
}
cmd.Stdin = strings.NewReader(stdin)
} }
res, err := cmd.Output() res, err := cmd.Output()

View file

@ -69,8 +69,11 @@ func TestOS_Bang(t *testing.T) {
}{ }{
{descr: "run command 1", eval: `os:! "echo 'hello, world'"`, want: "hello, world\n"}, {descr: "run command 1", eval: `os:! "echo 'hello, world'"`, want: "hello, world\n"},
{descr: "run command 2", eval: `os:! "date +%Y%m%d"`, want: time.Now().Format("20060102") + "\n"}, {descr: "run command 2", eval: `os:! "date +%Y%m%d"`, want: time.Now().Format("20060102") + "\n"},
{descr: "run command 3", eval: `os:! "tr [a-z] [A-Z]" "hello"`, want: "HELLO"}, {descr: "run command 3", eval: `os:! "hello" "tr [a-z] [A-Z]"`, want: "HELLO"},
{descr: "run command 4", eval: `os:! "tr -d e" "hello"`, want: "hllo"}, {descr: "run command 4", eval: `os:! "hello" "tr -d e" "hello"`, want: "hllo"},
{descr: "run command 5", eval: `"hello" | os:! "tr [a-z] [A-Z]"`, want: "HELLO"},
{descr: "run command 6", eval: `"hello" | os:! "tr -d e"`, want: "hllo"},
{descr: "run command 7", eval: `"hello" | os:! "tr -d e" | os:! "tr [a-z] [A-Z]"`, want: "HLLO"},
} }
for _, tt := range tests { for _, tt := range tests {