【问题标题】:Running docker exec command with a shell string and parameters in bash script在 bash 脚本中使用 shell 字符串和参数运行 docker exec 命令
【发布时间】:2020-10-07 06:37:02
【问题描述】:

我正在尝试在 bash 脚本中运行以下 docker exec 命令,其中我将 2 个参数传递给 bash 脚本。该命令应该删除以某个字符串开头的目录。我似乎没有正确传递参数:

  • $container 设置为 $1

  • $database 设置为 $2

  • $currdate 在 bash 脚本内部设置

    docker exec $container sh -c 'rm -rf /path/to/directory/${database}-${currdate}-*/'

【问题讨论】:

  • 1.在双引号内使用您的变量。 2. 单引号内的变量不插值。希望它会有所帮助。

标签: bash docker


【解决方案1】:

您必须使用双引号来插入变量。单引号不会插入任何内容,但双引号会。

docker exec $container sh -c "rm -rf /path/to/directory/${database}-${currdate}-*/"

来自 Bash 手册:

3.1.2.2 Single Quotes

将字符括在单引号 (') 中会保留引号内每个字符的字面值。单引号之间不能出现单引号,即使前面有反斜杠。

3.1.2.3 Double Quotes

将字符括在双引号 (") 中会保留引号内所有字符的字面值,$`\ 和启用历史扩展时,@987654331 除外@。字符$` 在双引号中保留其特殊含义(请参阅Shell Expansions)。反斜杠仅在后跟以下字符之一时才保留其特殊含义:$`"\ 或换行符。在双引号内,删除后面跟有这些字符之一的反斜杠。没有特殊含义的字符前面的反斜杠保持不变。双引号可以用反斜杠在双引号中引用。如果启用,将执行历史扩展,除非出现在双引号中的 ! 使用反斜杠转义。 ! 前面的反斜杠不会被删除。

特殊参数*@ 在双引号中具有特殊含义(参见Shell Parameter Expansion)。

【讨论】:

    猜你喜欢
    • 2020-06-24
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多