将多个串联的命令传递给 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
。
我有一个脚本 (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
。