先写跟项目无关的测试,没问题,正式的脚本就按照这个思路来写了。写完以后,测试,发现了两个问题,光看输出我是没法解决的,信息不足,对Bash又不够懂。想起调试,之前在<Linux 101 Hacks>看到过,找到-x选项:"Print commands and their arguments as they are executed."。用了下,挺好使的,问题很容易就解决了,简单说明一下。
1 第一个问题
这纯粹是自己写错了。> ./bin/prj_jetty.sh
./bin/prj_jetty.sh: line 13: /home/u1/deploy2/prj_local/jetty/bin/jetty.sh : No such file or directory
报的错莫名其妙。
> bash -x ./bin/prj_jetty.sh
+ source '/home/u1/deploy2/prj_local/jetty/bin/jetty.sh '
./bin/prj_jetty.sh: line 13: /home/u1/deploy2/prj_local/jetty/bin/jetty.sh : No such file or directory
看到+开头的那句就明白了。以前的写法:source "$PRJ_HOME/jetty/bin/jetty.sh "$@"",当$@不存在的时候,多了一个空格,导致找不到脚本。需要写成 source "$PRJ_HOME/jetty/bin/jetty.sh" "$@"
2 第二个问题
这种思路跟jetty.sh的实现逻辑不兼容。> bash -x ./bin/prj_jetty.sh start
+ source /home/u1/deploy2/prj_local/jetty/bin/jetty.sh start
+++ sed -e 's/^[SK][0-9]*//' -e 's/\.sh$//'
++++ basename ./bin/prj_jetty.sh
传给basename的是外层脚本的相关信息,basename的结果会赋值给NAME变量,NAME变量在后面多处被引用,这跟直接运行jetty.sh有差别,除非把prj_jetty.sh这个名字改为jetty.sh。但是即便这样,接下来还是会有错,因为jetty.sh假设自己是直接被运行的。
这种思路失败了,还是直接运行容器提供的脚本。
No comments:
Post a Comment