相关疑难解决方法(0)

检查Bash shell脚本中是否存在输入参数

我需要检查输入参数是否存在.我有以下脚本

if [ "$1" -gt "-1" ]
  then echo hi
fi
Run Code Online (Sandbox Code Playgroud)

我明白了

[: : integer expression expected
Run Code Online (Sandbox Code Playgroud)

如何首先检查输入参数1以查看它是否存在?

bash shell

1223
推荐指数
9
解决办法
113万
查看次数

双方括号[[]]比Bash中的单方括号[]更好吗?

最近在一次代码审查中,一位同事声称该[[ ]]构造比[ ]在类似的构造中更受欢迎

if [ "`id -nu`" = "$someuser" ] ; then 
     echo "I love you madly, $someuser"
fi
Run Code Online (Sandbox Code Playgroud)

他无法提供理由.有吗?

syntax bash if-statement

514
推荐指数
8
解决办法
20万
查看次数

如何使用Dockerfile在一个图层中复制多个文件?

以下Dockerfile包含四个COPY层次:

COPY README.md ./
COPY package.json ./
COPY gulpfile.js ./
COPY __BUILD_NUMBER ./
Run Code Online (Sandbox Code Playgroud)

如何使用一层复制这些文件?尝试了以下内容:

COPY [
    "__BUILD_NUMBER ./",
    "README.md ./",
    "gulpfile ./",
    "another_file ./",
]
Run Code Online (Sandbox Code Playgroud)

dockerfile

199
推荐指数
6
解决办法
12万
查看次数

为什么shell脚本比较经常使用x $ VAR = xyes?

我经常在使用autotools(autoconf,automake)的项目的构建脚本中看到这一点.当有人想检查shell变量的值时,他们经常使用这个习惯用法:

if test "x$SHELL_VAR" = "xyes"; then
...
Run Code Online (Sandbox Code Playgroud)

与简单地检查这样的值相比,这有什么好处:

if test $SHELL_VAR = "yes"; then
...
Run Code Online (Sandbox Code Playgroud)

我认为必须有一些原因让我经常看到这一点,但我无法弄清楚它是什么.

unix shell autotools

59
推荐指数
4
解决办法
2万
查看次数

使用 Dockerfile 运行 Jest 测试

问题

\n

嘿,我没有太多使用 Docker - 我正在尝试通过 Dockerfile 运行我的 Jest 测试。然而,我error在尝试构建图像时得到了这个:

\n

错误

\n
Step 13/16 : RUN if [ "$runTests" = "True" ]; then     RUN npm test; fi\n ---> Running in ccdb3f89fb79\n/bin/sh: RUN: not found\n
Run Code Online (Sandbox Code Playgroud)\n

Dockerfile

\n
FROM node:10-alpine as builder\nARG TOKEN\nWORKDIR /app\n\nARG runTests\n\n\nCOPY .npmrc-pipeline .npmrc\n\nCOPY package*.json ./\nRUN npm install\nCOPY . .\n\nRUN rm -f .npmrc\n\nENV PORT=2000\nENV NODE_ENV=production\n\n\nRUN if [ "$runTests" = "True" ]; then \\\n    RUN npm test; fi\n\nRUN npm run build\n\nEXPOSE 2000\n\nCMD ["npm", "start"]\n
Run Code Online (Sandbox Code Playgroud)\n

我用来构建图像的命令是这样的,其想法是仅当 …

docker reactjs jestjs dockerfile

7
推荐指数
1
解决办法
2万
查看次数

Docker 中的条件块

一段时间以来,我一直在使用 docker。我遇到过一种情况,我需要根据某些条件执行 Dockerfile 中存在的指令。例如这里是 Dockerfile 的片段

FROM centos:centos7
MAINTAINER Akshay <akshay@dm.com>

# Update and install required binaries
RUN yum update -y \
    && yum install -y which wget openssh-server sudo java-1.8.0-openjdk \
    && yum clean all

#install Maven
RUN curl -Lf http://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz -o /tmp/apache-maven-3.3.9.tar.gz
RUN tar -xzf /tmp/apache-maven-3.3.9.tar.gz -C /opt \
        && rm /tmp/apache-maven-3.3.9.tar.gz

ENV M2_HOME "/opt/apache-maven-3.3.9"
ENV PATH ${PATH}:${M2_HOME}/bin:

# Install Ant
ENV ANT_VERSION 1.9.4
RUN cd && \
    wget -q http://archive.apache.org/dist/ant/binaries/apache-ant-${ANT_VERSION}-bin.tar.gz && \
    tar -xzf apache-ant-${ANT_VERSION}-bin.tar.gz && \ …
Run Code Online (Sandbox Code Playgroud)

docker dockerfile

6
推荐指数
1
解决办法
2953
查看次数

有没有办法在 Dockefile 中使用 If 条件?

我是新手docker,我正在寻找一种根据环境在 docker 容器中执行命令的方法。

在 Dockerfile 中,我有 2 个命令,command_a 和 command_b。如果env = 'prod'运行command_a,则运行command_b。我怎样才能实现这个目标?

我尝试如下:

RUN if [ $env = "prod" ] ; then echo command_a; else echo cpmmand_b; fi;
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现所需的行为?

PS:我知道回声不应该在那里。

docker dockerfile

5
推荐指数
1
解决办法
6121
查看次数

在Dockerfile中的条件语句中运行

我有一个Dockerfile目前使用以下内容的:

COPY ./compose/local/django/start.sh /start.sh
RUN sed -i 's/\r//' /start.sh
RUN chmod +x /start.sh
Run Code Online (Sandbox Code Playgroud)

如您所见,它会复制文件,然后使其可执行。现在,我需要根据构建映像时提供的参数来更改此设置。我试过使用此:

RUN if [ "$arg" = "True" ]; then \
    COPY ./compose/local/django/new.sh /new.sh \
    RUN sed -i 's/\r//' /new.sh \
    RUN chmod +x /new.sh; else \
    COPY ./compose/local/django/start.sh /start.sh \
    RUN sed -i 's/\r//' /start.sh \
    RUN chmod +x /start.sh; fi
Run Code Online (Sandbox Code Playgroud)

但这失败了,因为看来我无法在条件语句中运行COPYRUN命令。它总是失败:

/bin/sh: 1: COPY: not found
Run Code Online (Sandbox Code Playgroud)

要么

/bin/sh: 1: RUN: not found
Run Code Online (Sandbox Code Playgroud)

因此,我认为最好的做法是创建一个单独的bash文件来进行复制,例如:

#!/usr/bin/env bash

if [ "${arg}" = "True" …
Run Code Online (Sandbox Code Playgroud)

docker

4
推荐指数
1
解决办法
5123
查看次数

根据 dockerfile 中的条件更改基础镜像

我想将参数 USE_ALPINE 发送到 docker 文件,如果为 true,我将使用 alpine 镜像,如果为 false,我将使用 debian 镜像

USE_ALPINE 的默认值我想将其设置为 false。

docker dockerfile docker-compose docker-build

4
推荐指数
1
解决办法
1619
查看次数