将多个串联的命令传递给 exec 语句失败

Passing multiple concatened commands to a exec statement fails

我有一个脚本 (starter.sh),其中仅包含以下内容:

#!/usr/bin/env bash
exec "$@"

脚本配置执行某个环境变量(即COMMAND)的内容

如果环境变量包含单个命令,则有效:

 COMMAND='unzip myfile.zip'

但是如果我尝试连接多个命令(使用 &&;),它会失败:

COMMAND='unzip myfile.zip && cd /home'

错误:

caution: filename not matched

错误显然是由解压缩命令引起的,该命令被 && 弄糊涂了,不知何故不再被解释为连接。

问题是是否有任何方法可以在不修改文件“starter.sh”中的 exec 调用的情况下将命令的串联列表传递给 exec 语句 我唯一的选择是将环境变量的内容修改为命令列表(不是 shell 文件的路径,否则这将是一个明显的解决方案)

来自文档:

exec: exec [-cl] [-a name] file [redirection ...] Exec FILE, replacing this shell with the specified program.

也就是说,exec 需要一个文件来执行。然后,当您添加多个命令时,整个字符串都试图被解释为文件名。

因此,如果您想传递不是文件名的内容,请不要使用 exec