Joerg: "/bin env perl", oder doch "/usr/local/bin/perl" ?

Hi,

eine Praxisfrage ... wir entwickeln derzeit ein groesseres Software-Paket (hauptsaechlich in Perl, dazu einige bash-scripts).

Nun liegen "bash" und "perl" bekanntlich auf verschiedenen Rechnern (bzw. Distributionen) an verschiedenen Orten im Filesystem.

Was ist nun "besser", um die Software moeglichst vielen Plattformen installierbar und lauffaehig zu haben:

#!/bin/bash
#!/usr/local/bin/perl (ggfs. mit der Empfehlung im Handbuch, einen symlink zum  "wirklichen" Ort zu setzen)

... oder doch ...

#!/bin/env bash
#!/bin/env perl

... gibt es "schwerwiegende" Argumente fuer oder gegen eine dieser Varianten?

Gruss aus Lausanne & Merci,

  • Joerg
  1. Hallo,

    ... gibt es "schwerwiegende" Argumente fuer oder gegen eine dieser Varianten?

    Ja. Bei der ersten Variante wird das Skript nur ausgeführt wenn perl in /bin liegt (was es bei mir zB nicht tut) die zweite Variante sucht nach perl im PATH des Benutzers.

    Siehe auch Shebang.

    Gruß,
    Severin

    --
    They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.
    -- Benjamin Franklin
  2. Moin!

    Was ist nun "besser", um die Software moeglichst vielen Plattformen installierbar und lauffaehig zu haben:

    Ein install script (ein Makefile) zu verwenden.

    Für Perl ist ja ohnehin ein Standard:
    perl Makefile.pl
    make
    make test
    make install

    Warum nicht ähnlich vorgehen?
    -- Skeeve

  3. Hi nochmal,

    Was ist nun "besser", um die Software moeglichst vielen Plattformen installierbar und lauffaehig zu haben:

    #!/bin/bash
    #!/usr/local/bin/perl (ggfs. mit der Empfehlung im Handbuch, einen symlink zum  "wirklichen" Ort zu setzen)

    ... oder doch ...

    #!/bin/env bash
    #!/bin/env perl

    ... gibt es "schwerwiegende" Argumente fuer oder gegen eine dieser Varianten?

    Nach weiterem Suchen und Probieren antworte mir auch mal selbst ;-) ... /bin/env hat mehrere Nachteile: (1) es existiert nicht auf "allen" Systemen, (2) es - oder der symlink - liegt nicht immer in /bin/env, (3) es akzeptiert nur ein Argument.

    Letzteres ist das Killer-Argument :-(

    Danke fuers feedback!

    • Joerg
    1. Moin!

      Letzteres ist das Killer-Argument :-(

      Und? Was macht Ihr jetzt?

      -- Skeeve