Spring-Cloud-Data-Flow-入门手册-3shell命令行

目录

Shell 1

16. Shell 选项... 2

17. 可用的命令行... 2

18. Tab 键自动填充... 3

19. 空格和单引号的使用规则... 3

19.1.引号和转义... 4

重要说明:本方是翻译自https://docs.spring.io/spring-cloud-dataflow/docs/1.3.0.M2/reference/htmlsingle/#getting-started这个文章,感谢Sabby AnandanMarius

BogoeviciEric BottardMark FisherIlayaperumal GopinathanGunnar HillertMark

PollackPatrick PeraltaGlenn RenfroThomas RisbergDave SyerDavid TuranskiJanne

ValkealahtiOleg Zhurakousky这些原文作者的写作成果,让我们能更好地入门学习Spring Cloud Data Flow的相关技术,考虑到国内中文的文档资料比较欠缺,而且基本不太成体系,所以自己希望来翻译该文章,方便学习使用。

以下是原文内容的翻译,一些关键性的技术术语,本文考虑不进行翻译,保持原来的英文词汇,加强技术术语印象,而且这些技术术语强行翻译成中文的话,感觉很别扭。另一方面水平有限,文本可能有翻译不太贴切或是错误的地方,还请大家体谅,看到后多多指正。

********************************以下是原文内容的翻译**********************

Version 1.3.0.M2

© 2012-2017 Pivotal Software, Inc.

你可以自己使用这个文章或是分发给其它人,但前提是你不以赚取费用为目标,同时每个转发的文章必须包含此版权通知,无论是印刷品版本还是电子发行版本。

Shell

在这一节中您将开始了解Shell和它更进一步的功能,涉及到如何处理空格,引号,以及SPEL表达式的解析。StreamDSLComposedTask DSL章节很适合用来开始学习shell命令行。

16. Shell 选项

Shell是基于SpringShell项目来构建的。有命令行选项与Spring

Shell和一些Data Flow的选项是通用的。shell接受以下命令行选项:

unix:>java -jar spring-cloud-dataflow-shell-1.2.1.RELEASE.jar --helpData Flow Options: --dataflow.uri=                              Address of the Data Flow Server [default: http://localhost:9393]. --dataflow.username=                        Username of the Data Flow Server [no default]. --dataflow.password=                    Password of the Data Flow Server [no default]. --dataflow.credentials-provider-command= Executes an external command which must return an OAuth Access Token [no default]. --dataflow.skip-ssl-validation=      Accept any SSL certificate (even self-signed) [default: no]. --spring.shell.historySize=                Default size of the shell log file [default: 3000]. --spring.shell.commandFile=                Data Flow Shell executes commands read from the file(s) and then exits. --help                                            This message.

spring.shell.commandfile这个选项是值得注意的,因为它可以用来指向一个现有的文件,其中包含所有用于部署一个或多个相关数据流任务的shell命令。这对于创建一些脚本来帮助自动化部署是非常有用的。

下边也是一个 shell 的命令

dataflow:>script --file

这可以将复杂的脚本文件模块化,分成多个独立文件是非常有用的。

17. 可用的命令行

在命令提示符处键入help,系统将列出所有可用的命令。大多数命令都是用于数据流功能的,但有一些是通用的。

! - Allows execution of operating system (OS) commandsclear - Clears the consolecls - Clears the consoledate - Displays the local date and timeexit - Exits the shellhttp get - Make GET request to http endpointhttp post - POST data to http endpointquit - Exits the shellsystem properties - Shows the shell's propertiesversion - Displays shell version

在help后面添加相应的命令的名称,系统将会显示关于这个命令的附加帮助信息。

dataflow:>help stream createKeyword:                  stream createDescription:              Create a new stream definitionKeyword:                  ** default **Keyword:                  name  Help:                  the name to give to the stream  Mandatory:              true  Default if specified:  '__NULL__'  Default if unspecified: '__NULL__'Keyword:                  definition  Help:                  a stream definition, using the DSL (e.g. "http --port=9000 | hdfs")  Mandatory:              true  Default if specified:  '__NULL__'  Default if unspecified: '__NULL__'Keyword:                  deploy  Help:                  whether to deploy the stream immediately  Mandatory:              false  Default if specified:  'true'  Default if unspecified: 'false'

18. Tab 键自动填充

Shell命令行的选项,在输入--后,可以通过按TAB键自动填充完整。如输入stream

create –后,直接按TAB键,那么会有相应的命令选项提示

dataflow:>stream create --stream create --definition    stream create --name

如果你是输--de后,再按TAB键,那么—definition这个选项将会自动填充完整

在应用程序或任务属性的流或组合任务DSL表达式中,也可以使用TAB键自动填充。还可以使用TAB键在流DSL表达式中获取相应的提示,以便发现有哪些可用的sources, processors和sinks。

19. 空格和引号的使用规则

如果参数值里包含空格或|字符,那么需要给他们添加单引号。下边的例子是把一个SPEL表达式传给一个转换processor,这个表达式会处理一切通过这个processor的数据:

transform --expression='new StringBuilder(payload).reverse()'

如果参数值当中需要嵌入单引号,那么需要把用到的单引号改为双引号:

// Query is: Select * from /Customers where name='Smith'scan --query='Select * from /Customers where name=''Smith'''

19.1. 引号和转义

基于Spring

Shell的客户端,它负责解析DSL并和数据流服务器进行交互。反过来,应用程序可能也具有依赖于嵌入式语言(如Spring

Expression Language

)的应用程序属性。

shell, Data Flow DSL 解析器和 SpEL都有相应的规则用于处理引号和转义。当他们结合在一起时就容易产生混乱。本章节会解释这些应用规则,并举例说明当涉及这三个组件时所遇到的复杂情况。

当然,情况并不总是那么复杂。

如果你不使用Data Flow

shell,例如你直接使用REST API,或者应用程序的属性用的不是SpEL表达式,转义规则就简单了。

19.1.1. Shell 的规则

可以说,shell是使用引号最复杂的组件,但这些规则可以很简单地罗列出来:

•shell命令由相应的命令键(--foo)和相应的值组成。存在一个特殊的无键映射,请参见下面

•值通常不能包含空格,因为空格是命令的默认分隔符。

•可以通过添加引号(单引号或双引号)来添加空格。

•如果用引号括起来,一个值可以嵌入一个相同类型的字符,需要前面加一个反斜杠(\)

•其他转义也是可用的,如\t,\n,\r,\ f和Unicode的转义形式\uxxxx

•最后,如果不使用引号来包含空格,那么无键映射是以一种特殊的方式处理的。

例如,shell支持!命令来执行本机shell命令。这个!接受单个无键的参数。以下命令行可以工作:

dataflow:>! rm foo

这里的参数是整个rm

foo

字符串,它被传递给底层的shell。

作为另一个例子,下面的命令都是实现同样功能的,参数值是foo(没有引号):

dataflow:>stream destroy foodataflow:>stream destroy --name foodataflow:>stream destroy "foo"dataflow:>stream destroy --name "foo"

19.1.2. DSL 解析规则

在解析器级别(即在stream 或task定义的内部),规则如下:

•在遇到第一个空格字符前,前边相应的字符解析为选项值。

•它们可以由字符串组成,由单引号或双引号包围。

•需要嵌入引号的话,需要使用两个连续引号。

因此,在下面的示例中,筛选器应用程序的--expression选项值在语义上是等价的:

filter --expression=payload>5filter --expression="payload>5"filter --expression='payload>5'filter --expression='payload > 5'

相对来说,最后一个是更易读的。主要是得益于它两边包围的单引号。实际表达式是payload

> 5

(没有引号)。

现在,让我们假设我们要测试字符串消息。如果我们想比较payload与SpEL 的字符串“foo”,我们可以这么做:

filter --expression=payload=='foo'          filter --expression='payload == ''foo'''    filter --expression='payload == "foo"'

第一个命令行,可以正常工作是因为没有空格,虽然不太清晰。

第二个命令行,使用单引号来保护整个参数,因此实际的单引号需要变为双引号。

第三个命令行,SpEL基于单引号或者双引号识别字符串,最后一种方法是最好的。

请注意上面的例子是不考虑在shell里使用的,例如,当直接调用REST API时。当在shell中输入时,整个流定义本身将在双引号内,它里面的一些字符需要转义。整个例子就变成了:

dataflow:>stream create foo --definition "http | filter --expression=payload='foo' | log"dataflow:>stream create foo --definition "http | filter --expression='payload == ''foo''' | log"dataflow:>stream create foo --definition "http | filter --expression='payload == \"foo\"' | log"

19.1.3. SpEL 语法和 SpEL 字符串

最后一块规则内容是关于SpEL表达式的。许多应用程序接受的选项是被解释为SpEL表达,而如上所述,字符串的处理也有一种特殊的方式。规则是:

•文字可以用单引号或双引号括起来。

•引号需要增加一倍才能嵌入作为一个字符引号。双引号内的单引号不需要特殊处理,反之亦然。

作为最后一个示例,假设希望使用转换处理器。该处理器接受一个expression选项,这是个SpEL表达式。它将对传入消息进行评估,使用默认的表达式payload(转发消息不受影响)。

重要的是,要明白以下命令行是等价的:

transform --expression=payloadtransform --expression='payload'

但是和下边的不同:

transform --expression="'payload'"transform --expression='''payload'''

当然,还有其他变体。

第一个系列将简单地对消息有效负载进行评估,而后一个示例将评估实际的实际字符串payload(没有引号)。

19.1.4. 规则整体情况

作为最后一个完整的示例,让我们回顾一下如何通过在Data Flow

shell上下文中创建流来强制将所有消息转换为字符串Hello World:

dataflow:>stream create foo --definition "http | transform --expression='''hello world''' | log" dataflow:>stream create foo --definition "http | transform --expression='\"hello world\"' | log" dataflow:>stream create foo --definition "http | transform --expression=\"'hello world'\" | log"

第一个命令行,这里在字符串两边加单引号(在数据流解析器级别),但它们需要加倍,因为属于在字符串中(等号后面的第一个单引号)。

第二、第三个命令行,分别使用单引号和双引号来覆盖数据流解析器级别上的整个字符串。因此,另一种引号可以在字符串中使用。整个内容都在shell的--definition参数内,但它使用了双引号,所以双引号需要转义(在shell级别)。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 重要说明:本方是翻译自https://docs.spring.io/spring-cloud-dataflow/d...
    devilteam2006阅读 10,396评论 1 12
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,127评论 2 34
  • sqlmap用户手册 说明:本文为转载,对原文中一些明显的拼写错误进行修正,并标注对自己有用的信息。 ======...
    wind_飘阅读 2,025评论 0 5
  • 如果你对侦探小说感兴趣,不妨读读英国作家阿瑟·柯南道尔的代表作《福尔摩斯探案集》。 阿瑟·柯南道尔...
    莫宇痕阅读 355评论 0 0