Одно из решений проблемы perl^M bad interpeter

    Если в Юниксе запустить перловый скрипт, в котором в первой строке #!/usr/bin/perl стоит в конце не "\n", а "\r\n",
    то bash выдаст ошибку:

    perl^M bad interpeter

    Можно заменить "\r\n" на "\n" следующей строчкой:

    perl -i -pe "s/\r|\n//g; binmode ARGVOUT" file.txt

    А можно просто создать симлинк с именем «perl\r» указывающий на /usr/bin/perl:

    ln -s /usr/bin/perl `perl -e 'print "/usr/bin/perl\r"'`

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 13

      +2
      Вот последнее предложение вы зря написали.
        0
        убрал
          +2
          Блин, хотел удалить Ваш коммент, за не надобностью, нажал на крестик, а он понижает оценку. Блин. Извините.
          Можете мне понизить.
          0
          Интересне решение с симлинком. Кстати, для любого скрипта с shebang строкой полезно будет.
            0
            но руки-то все равно тянутся к tr -d '\r' :)
            +1
            проще и надежнее воспользоваться программой dos2unix
              0
              Скрипты надо заливать по ftp в ASCII а не в BINARY — тогда проблем небудет
                0
                это тоже решение, я показал лишь другое.
                  0
                  это Вы круто сказали.
                  Видимо, не видели, какие вещи иногда распаковываются из архивов…
                  0
                  а еще проще использовать команду dos2unix
                    –1
                    Дело в том, что команду dos2unix придётся набирать всё время, а способ с симлинком делается только один раз.
                      0
                      Если «не всё время», то скорее время от времени.
                        0
                        Зато заменить виндовые EOL на юниксовые в принципе правильнее в данном случае. Иначе эти скрипты не заработают на другой машине. Я тоже за dos2unix.

                    Only users with full accounts can post comments. Log in, please.