将bash脚本参数传递给子进程不变

EMP*_*EMP 47 parameters bash scripting

我想编写一个简单的bash脚本,它将充当可执行文件的包装器.如何将脚本接收的所有参数传递给可执行文件?我试过了

/the/exe $@
Run Code Online (Sandbox Code Playgroud)

但这不适用于引用的参数,例如.

./myscript "one big parameter"
Run Code Online (Sandbox Code Playgroud)

运行

/the/exe one big parameter
Run Code Online (Sandbox Code Playgroud)

这不是一回事.

dda*_*daa 68

当一个shell脚本环绕一个可执行文件,如果你不想做的可执行文件完成之后任何东西(这对包装脚本一个共同的情况下,在我的经验),调用可执行正确的做法是:

exec /the/exe "$@"
Run Code Online (Sandbox Code Playgroud)

exec内置告诉shell只是把控制权交给可执行没有分叉.

实际上,这可以防止无用的shell进程在系统中闲置,直到包装进程终止.

这也意味着在命令之后不能执行任何exec命令.


sth*_*sth 16

你必须把$@引号括起来:

/the/exe "$@"
Run Code Online (Sandbox Code Playgroud)