This commit is contained in:
parent
e1b53f8bea
commit
2568dc45c2
2 changed files with 19 additions and 11 deletions
|
|
@ -93,11 +93,20 @@ 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 err := args.Bind(&cmdStr); err != nil {
|
if args.NArgs() == 1 {
|
||||||
return nil, err
|
if err := args.Bind(&cmdStr); err != nil {
|
||||||
|
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)
|
||||||
|
|
@ -105,12 +114,8 @@ func (oh osHandlers) bang(ctx context.Context, args ucl.CallArgs) (any, error) {
|
||||||
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()
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue