这是我的码头工人形象。我想从最后提到的 docker run 命令中传递的任何内容覆盖下面设置的默认环境变量
FROM ubuntu:16.04
ADD http://www.nic.funet.fi/pub/mirrors/apache.org/tomcat/tomcat-8/v8.0.48/bin/apache-tomcat-8.0.48.tar.gz /usr/local/
RUN cd /usr/local && tar -zxvf apache-tomcat-8.0.48.tar.gz && rm apache-tomcat-8.0.48.tar.gz
RUN mv /usr/local/apache-tomcat-8.0.48 /usr/local/tomcat
RUN rm -rf /usr/local/tomcat/webapps/*
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64
ENV CATALINA_HOME /usr/local/tomcat
ENV CATALINA_BASE /usr/local/tomcat
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
ENV dummy_url defaulturl
ENV database databasedefault
COPY my.war /usr/local/tomcat/webapps/
RUN echo >> /usr/local/tomcat/conf/test.properties
RUN echo dummy_url =$dummy_url >> /usr/local/tomcat/conf/test.properties
RUN echo database =$database >> /usr/local/tomcat/conf/test.properties
ENTRYPOINT ["catalina.sh", "run"]
Run Code Online (Sandbox Code Playgroud)
在本地运行:
docker run -p 8080:8080 -e dummy_url=http:google.com -e database=jdbc://mysql allimages/myimage:latest
Run Code Online (Sandbox Code Playgroud)
dummy_url 和数据库似乎没有在我添加它们的文件中被覆盖 - …
如何$@在保持其属性的同时存储在变量中?
即使我$@在所有可能的情况下使用或我自己的变量,我也想获得完全相同的行为。
以下尝试无效:
args=$@
args2="$@" # the arguments are combined (see the last output paragraph)
Run Code Online (Sandbox Code Playgroud)
我使用以下行测试了它们:
s.sh A B=" " C
Run Code Online (Sandbox Code Playgroud)
s.sh
args=$@
args2="$@" # the arguments are combined (see the last output paragraph)
Run Code Online (Sandbox Code Playgroud)
A.java
s.sh A B=" " C
Run Code Online (Sandbox Code Playgroud)
实际输出:
A B= C
A B= C
A B= C
A B= C
A B= C
A B= C
3: [A, B=, C]
3: [A, B=, C]
3: [A, B=, C]
1: [A B= C]
1: …Run Code Online (Sandbox Code Playgroud) 我正在尝试将结构化文件读入 Bash 中的关联数组。该文件在每一行中存储一个人名和一个人地址。例如:
person1|address1
person2|address2
...
personN|addressN
Run Code Online (Sandbox Code Playgroud)
我正在使用下面的脚本。
#!/bin/bash
declare -A address
while read line
do
name=`echo $line | cut -d '|' -f 1`
add=`echo $line | cut -d '|' -f 2`
address[$name]=$add
echo "$name - ${address[$name]}"
done < adresses.txt
for name in ${!address[*]}
do
echo "$name - ${address[$name]}"
done
Run Code Online (Sandbox Code Playgroud)
脚本正常工作。但是,在 FOR 循环中,当人名有空格(例如“John Nobody”)时,我遇到了一些问题。我怎样才能解决这个问题?
我已经写了一个简单的脚本,需要在任意数量的参数来证明之间的区别$@和$*:
#!/bin/bash
echo "double quoted $* $@"
echo 'single quoted $* $@'
Run Code Online (Sandbox Code Playgroud)
我在CLI上做了
$./stuff.sh a b c d e f dfs
Run Code Online (Sandbox Code Playgroud)
这就是打印出来的东西
double quoted a b c d e f dfs a b c d e f dfs
single quoted $* $@
Run Code Online (Sandbox Code Playgroud)
既然它们是相同的那么意味着$@等于$*?还是有一点我错过了?
给定参数列表,我尝试使用 bash 脚本生成如下所示的字符串:
- arg_1
- arg_2
- arg_3
- arg_4
Run Code Online (Sandbox Code Playgroud)
这是我尝试执行此操作的脚本:
seeds=
for i in $*; do
seeds=`printf "$seeds - $i\n"`
done;
echo "$seeds"
Run Code Online (Sandbox Code Playgroud)
但是,当我使用 input 运行它时arg_1 arg_2 arg_3 arg_4,上面的脚本会生成以下输出,这显然忽略了我的空格和换行符:
- arg_1 - arg_2 - arg_3 - arg_4
Run Code Online (Sandbox Code Playgroud)
我能知道我的脚本中做错了什么吗?或者有更好的方法来做到这一点吗?