Search code examples
bashscriptingparameters

Pass bash script parameters to sub-process unchanged


I want to write a simple bash script that will act as a wrapper for an executable. How do I pass all the parameters that script receives to the executable? I tried

/the/exe $@

but this doesn't work with quoted parameters, eg.

./myscript "one big parameter"

runs

/the/exe one big parameter

which is not the same thing.


Solution

  • When a shell script wraps around an executable, and if you do not want to do anything after the executable completes (that's a common case for wrapper scripts, in my experience), the correct way to call the executable is:

    exec /the/exe "$@"
    

    The exec built-in tells the shell to just give control to the executable without forking.

    Practically, that prevents a useless shell process from hanging around in the system until the wrapped process terminates.

    That also means that no command can be executed after the exec command.