我们有申请。作为应用程序的一部分 - 我们有一组bash脚本。
Sctips现在在tar-archive中:
$ ls -l manager/
total 3076
-rwx------+ 1 Administrators Domain Users 3123200 Jan 8 15:47 manager.tar
然后,在 TeamCity 构建之后, Maven 会创建类似" manager.jar "的jar文件其中包括" manager.tar "内部。
解压后jar然后tar - 一切正常。
但是!
如果把bash-scripts打包而没有将它们打包到tar-archive中 - 在构建和解压缩jar文件之后 - 我总是得到非常奇怪的错误:
$ ./manager.sh -h
: No such file or directory
$ bash -x manager.sh
+ $'\r'
: command not foundne 2:
+ $'\r'
: command not foundne 10:
'anager.sh: line 11: syntax error near unexpected token `{
'anager.sh: line 11: `setbase () {
虽然 - 两个manager.sh
脚本(来自两个版本)看起来都相同(diff
&& vimdiff
)。
UPD
删除所有'换行符'在脚本中 - 它似乎是工作,很少的例子:
setbase () { if [ "$1" = "SIT" ]; then
然后使用-xv
执行:
setbase () { if [ "$1" = "SIT" ]; then
export BASEDIR="/home/user/APP"
export smem="32G"
export xmem="32G"
elif [ "$1" = "DEV" ]; then
manager/manager.sh: line 13: syntax error near unexpected token `elif'
'manager/manager.sh: line 13: `elif [ "$1" = "DEV" ]; then
但是 VIM 并没有显示任何符号,例如^M
,两者都是相同的编码文件:
(这一项工作)
$ file -ib /home/user/APP/manager/manager.sh
text/x-java charset=us-ascii
(这一个 - 没有)
$ file -ib manager/manager.sh
text/x-java charset=us-ascii
答案 0 :(得分:1)
问题是DOS行结尾。这可能与jar包装有关,或者您的新脚本可能只是您拥有的唯一DOS行结束文件。在任何一种情况下都要修复。