Maven 构建损坏 bash 脚本?

Maven build corrupts bash scripts?

我们有申请。作为应用程序的一部分 - 我们有一组 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”里面包含了“manager.tar”。

解压 jar 然后 tar - 一切正常。

但是!

如果将 bash 脚本不打包到 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

在脚本中删除所有 'newlines' 时 - 它似乎有效,小例子:

setbase () { if [ "" = "SIT" ]; then

然后执行 -xv:

setbase () { if [ "" = "SIT" ]; then
  export BASEDIR="/home/user/APP"
  export smem="32G"
  export xmem="32G"
elif [ "" = "DEV" ]; then
manager/manager.sh: line 13: syntax error near unexpected token `elif'
'manager/manager.sh: line 13: `elif [ "" = "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

问题是 DOS 行结尾。这可能与 jar 打包有关,或者您的新脚本可能只是您拥有的唯一 DOS 行结束文件。在任何一种情况下都解决这个问题。