首页 > 解决方案 > 可以在 dash shell 或 bourne shell 中使用子字符串扩展吗?

问题描述

我正在将应用程序转换为新图像,并且现有命令使用子字符串扩展来设置工件版本,如下所示mvn clean versions:set -DnewVersion="0.1.$VCSINFO.I${INFO:0:6}.M$OTHER_INFO":我正在使用默认为 的 ubuntu 映像,/bin/sh但我无法弄清楚如何在 bourne shell 中执行等效操作,或者切换 shell 以运行命令。我知道 bash 已安装,因为我可以在/etc/shells.

我尝试使用RUN ['/bin/bash', '-c', '...'],但我可以看到它只是像这样运行该命令The command '/bin/sh -c ['/bin/bash', '-c',...。将此功能转换为此新图像的最佳方法是什么?

标签: linuxbashshelldockerubuntu

解决方案


您可以通过两种方式运行 bash 命令,甚至从 sh:通过将字符串 '/bin/bash path/to/your/cmd' 传递给 sh 的 -c 选项,或者通过在 cmd 中设置 x 位和作为 cmd a 的第一行#!/bin/bash

因此,在您的设置中,我将尝试 aRUN ['/bin/bash /path/to/your/cmd']或仅执行 aRUN ['/path/to/your/cmd']并确保cmd具有上述#!行,或者复杂但不安全 - 编写一个 sh 包装脚本,然后依次调用 bash 脚本。因此,如果调用此 wrappe 脚本/path/to/your/cmdwrapper.sh,则其内容为

:
/bin/bash /path/to/your/cmd

推荐阅读