我需要检查输入参数是否存在.我有以下脚本
if [ "$1" -gt "-1" ]
then echo hi
fi
Run Code Online (Sandbox Code Playgroud)
我明白了
[: : integer expression expected
Run Code Online (Sandbox Code Playgroud)
如何首先检查输入参数1以查看它是否存在?
最近在一次代码审查中,一位同事声称该[[ ]]构造比[ ]在类似的构造中更受欢迎
if [ "`id -nu`" = "$someuser" ] ; then
echo "I love you madly, $someuser"
fi
Run Code Online (Sandbox Code Playgroud)
他无法提供理由.有吗?
以下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) 我经常在使用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)
我认为必须有一些原因让我经常看到这一点,但我无法弄清楚它是什么.
嘿,我没有太多使用 Docker - 我正在尝试通过 Dockerfile 运行我的 Jest 测试。然而,我error在尝试构建图像时得到了这个:
Step 13/16 : RUN if [ "$runTests" = "True" ]; then RUN npm test; fi\n ---> Running in ccdb3f89fb79\n/bin/sh: RUN: not found\nRun Code Online (Sandbox Code Playgroud)\nFROM 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"]\nRun Code Online (Sandbox Code Playgroud)\n我用来构建图像的命令是这样的,其想法是仅当 …
一段时间以来,我一直在使用 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,我正在寻找一种根据环境在 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:我知道回声不应该在那里。
我有一个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)
但这失败了,因为看来我无法在条件语句中运行COPY或RUN命令。它总是失败:
/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) 我想将参数 USE_ALPINE 发送到 docker 文件,如果为 true,我将使用 alpine 镜像,如果为 false,我将使用 debian 镜像
USE_ALPINE 的默认值我想将其设置为 false。
docker ×5
dockerfile ×5
bash ×2
shell ×2
autotools ×1
docker-build ×1
if-statement ×1
jestjs ×1
reactjs ×1
syntax ×1
unix ×1