linux - 可以在 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',...
。将此功能转换为此新图像的最佳方法是什么?
解决方案
您可以通过两种方式运行 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
推荐阅读
- sql - SQL Like 与包含通配符的列
- sonarqube - 有没有办法忽略整个项目的声纳问题“common-java:InsufficientCommentDensity”?
- android-studio - Android Studio 从 3.1.4 升级到 3.2.1 后失败
- bash - 从本地 github 获取拉取的 bash 脚本
- php - 由 Route::view 定义的简单路由会给出错误“Route not defined”,当使用 Route::name 定义时它运行良好
- docker - phpmyadmin 映像的 Docker 拉取访问被拒绝
- git - 从提交创建 git 分支
- c++ - 链接器似乎忽略了库并默认为旧版本
- java - 尝试从 JSON 文件读取时不断收到 java.lang.NullPointerException
- php - DOMDocument 保存未能打开流:如果 https 则权限被拒绝