【问题标题】:Sh script not executed because of incorrect header由于标头不正确,sh 脚本未执行
【发布时间】:2017-06-16 09:35:56
【问题描述】:

我正在使用mvn clean install 命令生成一个.jar 文件。这个 jar 文件包含一个 sh 脚本,它应该被移动到 /tmp,然后用于从 pdf 文件生成图像。

EDIT :文件并未真正移动。它是从 .jar 在我的 /tmp 中创建的。

.jar 文件是从 windows 生成的,但使用的是 redhat linux 生产服务器。

有时,脚本无法运行,因为它的十六进制标头似乎不正确(使用 vim 并输入 :%!xxd)。

在我的脚本的正确版本中,第一行如下所示:

0000000: 2321 2f62 696e 2f62 6173 680a 5044 4654 #!/bin/bash.PDFT

在不正确的版本中,你可以看到:

0000000: 2321 2f62 696e 2f62 6173 680d 0a50 4446 #!/bin/bash..PDF

如果没有十六进制,文件的开头看起来像这样(很明显):

#!/bin/bash
PDFTOPPM=pdftoppm
CONVERT=convert
LOG=/tmp/pdf2imgSh.log

有人遇到过这个问题吗? 如何强制我的 maven 安装(在 Windows 上)正确生成 jar 而不会在脚本中损坏标头?

这个问题对我来说有点模糊,所以不要犹豫,要求编辑或精确。

提前致谢。

【问题讨论】:

  • 这是一个编码问题。你究竟是如何生成文件的?你用什么插件/代码?
  • 如你所说sometimes。如果您在 Windows 上使用 Git,请查看配置设置 core.safecrlfcore.autocrlf

标签: java bash maven


【解决方案1】:

在@h22 回答和@SubOtpimal 评论之后,我认为您可以强制 maven 对特定文件的 EOL 进行编码。

将此插件添加到您的 pom.xml

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
                <execution>
                    <id>ant-test</id>
                    <phase>package</phase>
                    <configuration>
                        <tasks>
                            <fixcrlf srcdir="${basedir}/src/main/resources/yourfilepath" eol="unix" />
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

使用您自己的文件或文件夹更改路径。它以递归方式工作。小心不要忘记路径,否则它会打破你的罐子。 这可能会奏效。希望这会有所帮助!

【讨论】:

    【解决方案2】:

    版本因行尾而异(Windows 版本和 Linux 版本)。生成脚本的代码使用特定于平台的行尾终止符(0A 与 0D 0A)。

    您可以在不更改代码的情况下更改行尾分隔符。按照here 的讨论设置默认的行结束符。配置系统属性可能会起作用,否则您可能需要编辑mvn 脚本。

    【讨论】:

      猜你喜欢
      • 2015-01-21
      • 2022-01-27
      • 2014-02-15
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 2014-07-07
      • 1970-01-01
      相关资源
      最近更新 更多