我正在尝试执行以下命令:
perl -pi -e 's,vaadin-element,color-picker,g' *.* demo/* test/* src/* theme/*/*
(以下this个文档之后)
不幸的是,由于出现以下错误,看来我使用的Pearl窗口分布有一些问题:
Can't open *.*: Invalid argument.
Can't open demo/*: Invalid argument.
Can't open test/*: Invalid argument.
Can't open src/*: Invalid argument.
Can't open theme/*/*: Invalid argument.
关于如何解决该问题的任何建议? 预先谢谢你!
免责声明: 我以前从未使用过Pearl,而且绝对没有经验。
答案 0 :(得分:5)
在unix系统中,shell扩展glob并将文件名传递给程序。
$ perl -e'CORE::say for @ARGV' *
file1
file2
另一方面,Windows shell会按原样传递值,并根据需要将其留给程序以将其视为glob。
>perl -e"CORE::say for @ARGV" *
*
您可以按照以下步骤进行通配:
>perl -MFile::DosGlob=glob -e"BEGIN { @ARGV = map glob, @ARGV } CORE::say for @ARGV" *
file1
file2
BEGIN
块通常不是必需的,但是它将确保使用-n
(由-p
暗示)时足够早地发现问题。
-MFile::DosGlob=glob
使glob
具有类似Windows的语义。例如,它使*.*
匹配所有文件,即使它们不包含.
。
集成:
perl -i -MFile::DosGlob=glob -pe"BEGIN { @ARGV = map glob, @ARGV } s,vaadin-element,color-picker,g" *.* demo/* test/* src/* theme/*/*
答案 1 :(得分:1)
在Unix派生的操作系统中,shell扩展了main
之类的glob,并将命令行作为字符串数组提供给程序。
在Windows中,命令行是单个字符串,由程序来解释它的含义,包括引号字符和glob之类的内容。如果程序是普通的C程序,则C运行时将解释命令行,并扩展glob,然后将字符串数组传递给File::Glob
。这是因为C标准要求这样做。
但是Perl不是C。使用@App:name("Http_Request_Response_Tutorial")
@App:description("This app demonstrate the usage of http request sink and http response source")
@source(type='http-response' ,sink.id='cardTypeSink',
@map(type='xml', namespaces = "xmlns=http://localhost/SmartPayments/",
@attributes(creditCardNo = 'trp:creditCardNo',creditCardType = ".")))
@sink(type='log')
define stream EnrichedCreditCardStream (creditCardNo string,creditCardType string);
@sink(type='http-request',publisher.url='http://www.mocky.io/v2/5cee2fa1300000013a6e9961',method='POST', headers="'Content-Type:application/x-www-form-urlencoded'",
sink.id="cardTypeSink",
@map(type='keyvalue', @payload(CardNumber='{{creditCardNo}}')))
define stream CreditCardStream (creditCardNo string);
库来扩展参数。