Uma opção seria usar a opção perl -x
da seguinte forma:
#!/bin/bash
perl -x "$0"
exit
#!/bin/perl
#perl code goes here
No meu sistema que funciona para sh ou perl.
Eu tive um script bash-backup por algum tempo que funcionou bem para mim, mas agora eu precisava de alguns recursos e colocá-los em um script perl. Funciona perfeitamente bem e estou feliz. Mas minha memória muscular sempre quer digitar "sh backup" em vez de "perl backup" (ou usar "./backup" ou algo parecido). Por acaso comecei com "sh backup" e agora mal consigo me livrar disso.
Minha ideia foi esta:
Ter um módulo cleverfilter.pm:
package cleverfilter;
use Filter::Simple;
FILTER {
s/perl backup; exit;//g;
};
1;
e isso no meu script de backup:
#!/usr/bin/perl
use cleverfilter;
perl backup; exit;
use strict;
use warnings;
...
A idéia por trás disso era que um script perl removeria (por meio do filtro) a parte "perl backup; exit;", mas o bash não. O Perl rodaria bem, e o bash executaria esse script como um script em perl.
Mas o Filter :: Simple parece ter um problema: filtra tudo após o uso dos módulos. É por isso que eu precisava colocá-lo no topo da linha "perl backup". Agora, quando eu corro com perl, funciona como um encanto. Executá-lo com bash, obviamente, me dá esses problemas:
backup: 3: backup: use: not found
Claro, eu poderia simplesmente criar um programa vazio "use" em algum lugar que ignora todos os parâmetros que estão chegando, mas isso não é uma boa solução para isso.
Então, minha pergunta aqui: existe alguma maneira de escrever algum script-parte que será executado com o bash, mas não com o perl? Algum tipo de comentário, por exemplo, como em HTML com aqueles estranhos IE-Style-Comment-Tags?
Ou existe alguma solução melhor? Algo mais fácil que eu não pensei ainda?