Por acaso rodando perl-script com sh, como detectar isso e tomar ações?

3

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?

    
por user7595 26.06.2015 / 22:13

1 resposta

4

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.

    
por 26.06.2015 / 22:56

Tags