相关疑难解决方法(0)

here-document给出'意外的文件结束'错误

我需要我的脚本从终端发送电子邮件.基于我在这里看到的以及许多其他地方的在线,我将它格式化为:

/var/mail -s "$SUBJECT" "$EMAIL" << EOF
Here's a line of my message!
And here's another line!
Last line of the message here!
EOF
Run Code Online (Sandbox Code Playgroud)

但是,当我运行这个时,我得到这个警告:

myfile.sh: line x: warning: here-document at line y delimited by end-of-file (wanted 'EOF')

myfile.sh: line x+1: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)

...其中第x行是程序中最后写入的代码行,第y行是其中的行/var/mail.我试着更换EOF其他的事情(ENDOFMESSAGE,FINISH,等),但无济于事.我在网上找到的几乎所有内容都是这样做的,而且我真的很喜欢bash,所以我很难自己搞清楚.有人可以提供任何帮助吗?

email bash heredoc

64
推荐指数
3
解决办法
9万
查看次数

有没有可以编译成Bash的语言?

我既喜欢又讨厌写Bash.我喜欢它是如此简化操作文件和处理进程(我同意这个流行的问题,它在这方面比Python,Ruby等更好),但我讨厌语法,特别是在条件,循环等方面.

(这是主观的,但我发现它既令人困惑又烦人.例如,$var在阅读时,但var在写作时;如果周围有空格则静默写入; =使用正则表达式时ifs中的双括号;有时双分号和其他单分号;等等)

作为编写JS的CoffeeScript的忠实粉丝,我一直在想:是否有任何语言具有Python/Ruby/CoffeeScript等语言的美学/语法,但是编译和运行为Bash而不是其他运行时之一?

例如,我希望能够用更简单的语法编写Bash - Bash:

$AGGREGATE_FILENAME = 'allfiles.txt'

if not exists $AGGREGATE_FILENAME
    touch $AGGREGATE_FILENAME

for $file in files/*
    cat $file >> $AGGREGATE_FILENAME

switch $1
    case 'test'
        run-tests
        echo 'Tests finished!'
    case 'deploy'
        echo 'Packaging...'
        mv foo bar/
        deploy-bar
Run Code Online (Sandbox Code Playgroud)

这是一个超级人为的例子,语法是一个稻草人(主要来自CoffeeScript,但保留了一流命令的基本Bash概念,与变量分开,松散打字).

无论如何,只是一个问题和思考的食物.我很喜欢到能写我的剧本比猛砸东西更好.=)谢谢!

bash shell scripting coffeescript

54
推荐指数
6
解决办法
6974
查看次数

标签 统计

bash ×2

coffeescript ×1

email ×1

heredoc ×1

scripting ×1

shell ×1