find2perl perl shebang + eval的确切含义是什么?

问题描述

| 以下是什么?
#! /usr/bin/perl -w
    eval \'exec /usr/bin/perl -S $0 ${1+\"$@\"}\'
        if 0; #$running_under_some_shell
if 0
永远不会成立,因此评估部分将永远不会执行, 而且评估也很奇怪-在这种情况下,
$0
的值是什么(在单引号内?) ps:取自find2perl命令的结果     

解决方法

最佳猜测-如注释ѭ3所示,它用于检测脚本是否由perl以外的其他shell运行,例如重击。   如果0永远都不为真,那么eval部分将永远不会执行, 不是perl,不是。对于其他shell(例如bash),它不会发现行继续,而只会执行
eval
语句。然后,这将在perl下重新运行脚本。 (奇怪的是,与hashbang行不同的选项。)   而且eval也很奇怪-在这种情况下,$ 0的值是什么(在单引号内?) 同样,这将通过bash而不是perl进行扩展:在这里,这意味着将find2perl传递到perl解释器中的路径。     ,我在这里找到了一些讨论: http://www.perlmonks.org/?node_id=825147   扩展的哈希爆炸在那里,所以您   几乎可以运行您的Perl脚本   阳光下的任何/ bin / sh,甚至   不遵守的外壳/内核   hashbang,它将仍然启动perl   到底。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...