{"record":{"id":"ec365aaa949d9ec8","repo":"hashicorp/nomad","slug":"error-cmd-must-have-at-least-one-value","errorCode":null,"errorMessage":"error cmd must have at least one value","messagePattern":"error cmd must have at least one value","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"drivers/exec/driver.go","lineNumber":698,"sourceCode":"func (d *Driver) SignalTask(taskID string, signal string) error {\n\thandle, ok := d.tasks.Get(taskID)\n\tif !ok {\n\t\treturn drivers.ErrTaskNotFound\n\t}\n\n\tsig := os.Interrupt\n\tif s, ok := signals.SignalLookup[signal]; ok {\n\t\tsig = s\n\t} else {\n\t\td.logger.Warn(\"unknown signal to send to task, using SIGINT instead\", \"signal\", signal, \"task_id\", handle.taskConfig.ID)\n\n\t}\n\treturn handle.exec.Signal(sig)\n}\n\nfunc (d *Driver) ExecTask(taskID string, cmd []string, timeout time.Duration) (*drivers.ExecTaskResult, error) {\n\tif len(cmd) == 0 {\n\t\treturn nil, fmt.Errorf(\"error cmd must have at least one value\")\n\t}\n\thandle, ok := d.tasks.Get(taskID)\n\tif !ok {\n\t\treturn nil, drivers.ErrTaskNotFound\n\t}\n\n\targs := []string{}\n\tif len(cmd) > 1 {\n\t\targs = cmd[1:]\n\t}\n\n\tout, exitCode, err := handle.exec.Exec(time.Now().Add(timeout), cmd[0], args)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &drivers.ExecTaskResult{\n\t\tStdout: out,","sourceCodeStart":680,"sourceCodeEnd":716,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/drivers/exec/driver.go#L680-L716","documentation":"ExecTask runs a command inside a running task's environment. Before looking up the task, it validates that the cmd slice is non-empty; passing an empty slice is rejected with this error because there is no command to execute.","triggerScenarios":"Calling driver.ExecTask(taskID, []string{}, timeout) — an empty or nil command slice.","commonSituations":"Dynamic command construction where variables expand to nothing; config/template producing an empty command; copy-paste calling ExecTask with the wrong variable.","solutions":["Ensure the command slice contains at least the binary path, e.g. []string{\"/bin/ls\"}.","Add an up-front length check on the command before invoking ExecTask.","Fix the upstream logic or config that yields an empty command value."],"exampleFix":"// before\ndriver.ExecTask(taskID, []string{}, time.Minute)\n// after\ncmd := []string{\"/bin/echo\", \"hello\"}\nif len(cmd) == 0 {\n    return fmt.Errorf(\"command required\")\n}\ndriver.ExecTask(taskID, cmd, time.Minute)","handlingStrategy":"validation","validationCode":"if len(cmd) == 0 {\n    return fmt.Errorf(\"ExecTask requires a non-empty command\")\n}","typeGuard":"func validCmd(cmd []string) bool { return len(cmd) > 0 && cmd[0] != \"\" }","tryCatchPattern":"if _, err := driver.ExecTask(taskID, cmd, timeout); err != nil && strings.Contains(err.Error(), \"cmd must have at least one value\") {\n    return fmt.Errorf(\"command argument was empty: %w\", err)\n}","preventionTips":["Validate argv length before any exec-style call.","Don't pass user/config-supplied command strings unchecked.","Prefer explicit command construction over variadic expansion."],"tags":["exec-driver","validation","nomad"],"backgroundTag":"empty-command-argument","analyzedSha":"482b49bf1aec006f089bcfc7e632d8f6ac303e5e","analyzedAt":"2026-09-04T07:54:14.808Z","contentChangedAt":"2026-09-04T07:54:14.808Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}