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 行结束文件。在任何一种情况下都解决这个问题。
我们有申请。作为应用程序的一部分 - 我们有一组 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 行结束文件。在任何一种情况下都解决这个问题。