@@ -270,15 +270,16 @@ func (d *Devbox) RunScript(ctx context.Context, envOpts devopt.EnvOptions, cmdNa
270
270
// better alternative since devbox run and devbox shell are not the same.
271
271
env ["DEVBOX_SHELL_ENABLED" ] = "1"
272
272
273
- // wrap the arg in double-quotes, and escape any double-quotes inside it
274
- for idx , arg := range cmdArgs {
275
- cmdArgs [idx ] = strconv .Quote (arg )
276
- }
277
-
278
- var cmdWithArgs []string
273
+ cmdString := ""
279
274
if _ , ok := d .cfg .Scripts ()[cmdName ]; ok {
280
275
// it's a script, so replace the command with the script file's path.
281
- cmdWithArgs = append ([]string {shellgen .ScriptPath (d .ProjectDir (), cmdName )}, cmdArgs ... )
276
+ cmdBuilder := strings.Builder {}
277
+ writeQuoted (& cmdBuilder , shellgen .ScriptPath (d .ProjectDir (), cmdName ))
278
+ for _ , arg := range cmdArgs {
279
+ cmdBuilder .WriteByte (' ' )
280
+ writeQuoted (& cmdBuilder , arg )
281
+ }
282
+ cmdString = cmdBuilder .String ()
282
283
} else {
283
284
// Arbitrary commands should also run the hooks, so we write them to a file as well. However, if the
284
285
// command args include env variable evaluations, then they'll be evaluated _before_ the hooks run,
@@ -293,11 +294,21 @@ func (d *Devbox) RunScript(ctx context.Context, envOpts devopt.EnvOptions, cmdNa
293
294
if err != nil {
294
295
return err
295
296
}
296
- cmdWithArgs = []string {shellgen .ScriptPath (d .ProjectDir (), arbitraryCmdFilename )}
297
- env ["DEVBOX_RUN_CMD" ] = strings .Join (append ([]string {cmdName }, cmdArgs ... ), " " )
297
+
298
+ cmdBuilder := strings.Builder {}
299
+ writeQuoted (& cmdBuilder , shellgen .ScriptPath (d .ProjectDir (), arbitraryCmdFilename ))
300
+ cmdString = cmdBuilder .String ()
301
+
302
+ cmdBuilder .Reset ()
303
+ writeQuoted (& cmdBuilder , cmdName )
304
+ for _ , arg := range cmdArgs {
305
+ cmdBuilder .WriteByte (' ' )
306
+ writeQuoted (& cmdBuilder , arg )
307
+ }
308
+ env ["DEVBOX_RUN_CMD" ] = cmdBuilder .String ()
298
309
}
299
310
300
- return nix .RunScript (d .projectDir , strings . Join ( cmdWithArgs , " " ) , env )
311
+ return nix .RunScript (d .projectDir , cmdString , env )
301
312
}
302
313
303
314
// Install ensures that all the packages in the config are installed
0 commit comments