3

У меня довольно долгое время был bash-backup-script, который у меня работал нормально, но теперь мне нужны были некоторые функции и я включил их в 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 backup". Теперь, когда я запускаю его с Perl, он работает как шарм. Запуск с bash, очевидно, вызывает у меня следующие проблемы:

backup: 3: backup: use: not found

Конечно, я мог бы просто создать пустую программу, "использующую" где-нибудь, которая игнорирует все приходящие параметры, но это не очень хорошее решение для этого.

Итак, мой вопрос здесь: есть ли способ написать некоторую часть скрипта, которая будет выполняться с помощью bash, но не с помощью perl? Какой-то комментарий, например, как в HTML с этими странными тегами IE-Style-Comment-Tags?

Или есть лучшее решение? Что-то проще, я еще не думал?

1 ответ1

4

Один из вариантов - использовать параметр perl -x например так:

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

В моей системе это работает как для sh, так и для perl.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .