我有一个 bash-backup 脚本,它对我来说工作得很好,但现在我需要一些功能并将它们放入 perl 脚本中。它工作得很好,我很高兴。但我的肌肉记忆总是想输入“sh backup”而不是“perl backup”(或使用“./backup”或类似的东西)。我碰巧从“sh backup”开始,现在我几乎无法摆脱它了。
我的想法是这样的:
有一个模块 cleverfilter.pm:
package cleverfilter;
use Filter::Simple;
FILTER {
s/perl backup; exit;//g;
};
1;
这是我的备份脚本:
#!/usr/bin/perl
use cleverfilter;
perl backup; exit;
use strict;
use warnings;
...
其背后的想法是,perl 脚本会(通过过滤器)删除“perl backup; exit;”部分,但 bash 不会。Perl 可以正常运行,而 bash 会将此脚本作为 perl 脚本运行。
但是 Filter::Simple 似乎有一个问题:它过滤了所有内容后它是模块使用。这就是为什么我需要把它放在“perl 备份”行的顶部。现在,当我用 perl 运行它时,它运行得很好。用 bash 运行它,显然会给我带来这些问题:
backup: 3: backup: use: not found
当然,我可以在某处创建一个空程序“使用”,忽略所有传入的参数,但这不是一个好的解决方案。
所以,我的问题是:有没有办法编写一些脚本部分,这些脚本部分将由 bash 执行,但不由 perl 执行?某种注释,例如,像 HTML 中那些奇怪的 IE 样式注释标签?
或者有更好的解决方案吗?我还没有想到更简单的方法吗?
答案1
一种选择是使用perl -x
如下选项:
#!/bin/bash
perl -x "$0"
exit
#!/bin/perl
#perl code goes here
在我的系统上,它适用于 sh 或 perl。