我遇到了一点麻烦。我刚刚编写了一个简单的shell脚本来显示maven在文件中的一些依赖关系。它工作正常。但唯一的问题。在此过程中,我将显示有关此流程进度的信息等(我在下面的示例中对此进行了描述)。我使用printf
显示的其中一行是重复的,它看起来像:
在../ path / all_dependencies.txt
中编写依赖项- 使用" mvn依赖:树-Dverbose" .....
- 使用" mvn依赖:树-Dverbose -Dincludes = javax.servlet" .....
我无法理解为什么会在此处显示其他行。我在互联网上透露了很多消息来源,但没有发现我需要挖掘的方向。我想它可能会受到进度条的影响,但无法理解究竟是怎样的。
还有什么有趣的,为什么我会得到不同的线条?也许它是数组如何工作的一个特征?...
我将不胜感激任何帮助/解释等等。
这是我的剧本,我在遇到问题之前添加了评论:
#!/bin/sh
start=$(date)
printf "\n Show dependencies from all projects \n $start"
printf "\n -----------------------------------"
#Paths to catalogs
PATH1=..some/path1
PATH2=..some/path2
PATH3=..some/path3
green='\033[0;32m'
red='\033[0;31'
nc='\033[0m'
# mvn_params represents Maven Parametrs options
# you can specify here all params you want to use when dependency tree will be applied
#
# E.G: -Dverbose -Dincludes=javax.servlet
#
if [ "$#" -eq 0 ]; then
maven_params=""
else
maven_params=( "$@" )
fi
array=(
$PATH1
$PATH2
$PATH3
)
cp /dev/null all-dependencies.txt
for element in ${array[@]}; do
module=$element
if [ -d "$module" ]; then
cd $element
full_path="dependencies.txt"
printf "\n Writing dependencies in $module/$full_path"
# A duplicated line is below
printf "\n -- Applying with \"mvn dependency:tree %s \"....." "${maven_params[@]}"
sp='/-\|'
printf ' '
mvn dependency:tree "${maven_params[@]}" > $full_path &
while [[ -n $(jobs -r) ]]; do
printf '\b%.1s' "$sp"
sp=${sp#?}${sp%???}
done
status_maven=$?
cat $full_path >> ../all-dependencies.txt
if [ $status_maven -eq 0 ]; then
printf "\b%.1s ${green}\\u2714${nc} Done\n"
else
printf "\b%.1s ${red}\\u274C${nc} Failed\n"
fi
else
printf "\n ${red}\\u274C Failed. ${nc} $module: No such file or directory\n"
fi
done
printf "\n ${green}DONE:${nc} File with all dependencies has been created: all-dependencies.txt"
exit 0
答案 0 :(得分:3)
您看到的行为可以通过此示例演示:
printf "\nParameter: %s\n" a b c
如果您只有一个格式代码(此处为:%s
),但是将多个参数传递给printf
,则该字符串将被反复使用,因此该语句的输出为:< / p>
Parameter: a
Parameter: b
Parameter: c
在您的情况下,这意味着数组maven_params
包含两个元素。
答案 1 :(得分:1)
感谢user1934428,我能够考虑shell中的数组元素表示。我找到了一个简单的解决方 我希望对那些也在寻找答案的人有所帮助。
就我而言,我写了"${maven_params[@]}"
,其中[@]
表示彼此分开的所有参数。我不得不使用[*]
代替。它提供了像$1$2
等等一样使用数组元素。
&#34; $ @&#34;将每个元素扩展为单独的参数,而&#34; $ *&#34;扩展到args合并为一个参数