npo*_*aka 1 ruby polyglot batch-file
通常这对于像这个臭名昭着的例子中的 "自调用"脚本一样有用
带嵌入代码的好脚本不应该使用难看的转义序列,没有临时文件和冗余输出.可以用Ruby完成吗?
是的,有些hacks.Here是一个例子(文件应该是.bat扩展名):
@break #^
=begin
@echo off
echo BATCH: Hello world!
ruby "%~f0" %*
exit /b 0
=end
puts 'RUBY: Hello world!'
Run Code Online (Sandbox Code Playgroud)
输出将是:
BATCH:你好世界!
RUBY:你好世界!
这是解释.
对于Ruby,@break #^将声明一个实例变量break并将以注释结束该行.在下一行,它将启动一个多行注释,其中将放置批处理代码.
另一方面,Cmd.exe将以静默方式执行break命令(因为如果@符号)并且因为break命令不执行任何操作(它只是为了向后兼容而留下旧的dos命令)它将没有任何效果.结束carret(它在批处理中转义特殊符号)将转义新行,前两行将被取为一行.批处理部分完成后,我们可以关闭Ruby注释并放入代码.
这里可以看到批量嵌入代码的几个例子(Python,PHP等).
| 归档时间: |
|
| 查看次数: |
587 次 |
| 最近记录: |