Questão Acorrentemente executando o script perl com sh, como detectar isso e tomar ações?


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:

Tendo 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 iria (através do filtro) remover o "perl backup; exit;" - parte, mas o bash não faria. O Perl rodaria bem, e o bash executaria esse script como um script em perl.

Mas Filter :: Simple parece ter um problema: filtra tudo depois de é o uso de 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, a 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 esses estranhos IE-Style-Comment-Tags?

Ou existe alguma solução melhor? Algo mais fácil que eu não pensei ainda?


3


origem




Respostas:


Uma opção seria usar o perl -x opção como esta:

#!/bin/bash
perl -x "$0"
exit
#!/bin/perl
#perl code goes here

No meu sistema que funciona para sh ou perl.


4