【问题标题】:Shell script written in Notepad++, Visual Studio Code, Sublime not working as expected用 Notepad++、Visual Studio Code、Sublime 编写的 Shell 脚本无法按预期工作
【发布时间】:2020-05-28 02:28:16
【问题描述】:

我使用三种不同的 ide 编写了以下代码。代码很简单,它在 hive 上创建数据库,但数据库名称将是动态的。

#!/bin/bash
year=`date +%Y`
month=`date +%m`
day=`date +%d`
echo ${year}
echo ${month}
echo ${day}
dbname=dynamic_hive_${year}_${month}_${day}
echo ${dbname}
hive -e "create database if not exists ${dbname}; use ${dbname}; drop table bins_1; CREATE TABLE bins_1 (firstname string);"

我在我们的环境中上传了这段代码并使用 java 程序运行它。 java 程序使用 java Runtime.exec 来运行脚本。但是,当我看到日志时,结果如下:

在这里,我在每个回显之间都有一个空格,并且数据库名称也不如预期。如果我手动运行上传的文件做 sh testfile.sh,那么我得到以下结果:

数据库打印出来了,但它很奇怪,不像预期的那样。在错误中,我们可以看到无法解析数据库。我认为新行出现在 2020 年之后,因此不会被解析。

如果我在我的服务器中复制相同的代码,通过执行 vim 并运行它,那么它运行得非常好。我很困惑,我真的不知道我错过了什么。这应该相当简单,但我错过了一些东西。如果有人可以帮助我,我将不胜感激。

【问题讨论】:

    标签: bash shell visual-studio-code notepad++


    【解决方案1】:

    您的行尾似乎有问题。如果您在复制之前检查 VSCode 中的行尾 - 似乎您的脚本以 CRLF 作为分隔符而不只是 LF,也许?

    How to make all line endings (EOLs) in all files in Visual Studio Code, UNIX like?

    另外,尝试执行“cat -vt /path/to/script”复制后查看任何奇怪的字符。

    【讨论】:

    • 你也可以在实际运行之前在脚本上运行dos2unix。
    • 非常感谢伊恩·麦高恩。文件中似乎有奇怪的字符。正如@MatiasBarrios 所建议的那样,我做了dos2unix,然后它工作得非常好。该信息也在 Ian 提供的链接中提供。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2014-05-07
    • 2019-06-16
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多