?

Log in

ненавижу - Поклонник деепричастий [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

ненавижу [июл. 31, 2005|11:33 am]
Anatoly Vorobey
(понятно будет только программистам)

Убил 20 минут на поистине идиотскую проблему; почему-то скрипт на перле не запускался напрямую "./xxx.pl", хотя "perl xxx.pl" работало отлично. Оказалось, что строчка shellbang

#!/usr/bin/perl

не работала, потому что она была не

#!/usr/bin/perl\n

а

#!/usr/bin/perl\r\n

(видимо, кто-то редактировал скрипт на Windows-системе в какой-то момент...)

Я ненавижу компьютеры.
СсылкаОтветить

Comments:
[User Picture]From: bolk
2005-07-31 08:39 am
Когда-то очень давно тоже с этим сталкивался :) Тогда же, в первый раз запустив vi, увидел в конце этой строки "^M" и Рамазаныч, бывший веб-мастер ksu.ru (даже лица память не сохранила, столько лет прошло), объяснил мне что к чему. Или это не он объяснил... ничего не помню.
(Ответить) (Thread)
[User Picture]From: avva
2005-07-31 08:43 am
Ага, только на этих машинах /bin/vi это на самом деле vim, который (по умолчанию по крайней мере) никакие ^M не показывает. А то я бы сразу понял. Ненавижу.
(Ответить) (Parent) (Thread)
[User Picture]From: bolk
2005-07-31 08:48 am
Мои знания vi (и vim) много лет остаются на уровне "a,i,dd,x,:,q,!,w,/,?". Так что как вернуть в vim "^M" я не знаю :)
(Ответить) (Parent) (Thread)
[User Picture]From: klvov
2005-07-31 12:37 pm
А не подскажет ли кто, есть ли что-то похожее на vi/vim, работающее под Win, при этом позволяющее работать с кириллицей? Я видел порт vim под Windows, но при переключении раскладки в нем сразу все хоткеи перестают работать, и поэтому использовать его почти невозможно.
(Ответить) (Parent) (Thread)
[User Picture]From: livsy
2005-08-01 12:48 pm
Вообще-то есть хороший порт emacs. ;)

Редакторов под win32 море. Нужны какие-то особенные функции vim или просто консольный редактор?
(Ответить) (Parent) (Thread)
[User Picture]From: klvov
2005-08-02 09:50 am
Хочется не обязательно консольный редактор, но такой, чтобы текст ощущался, что называется, "на кончиках пальцев". Принципы, по которым построен интерфейс того же vim, кажется, позволяют этого достичь, несмотря на довольно крутую learning curve. После того, как научишься печатать вслепую, мне кажется, освоение какого-нибудь такого редактора - это следующий шаг.

Говорите, есть порт emacs под win... надо будет посмотреть.
(Ответить) (Parent) (Thread)
From: (Anonymous)
2005-07-31 04:48 pm
Doslowno !
(Ответить) (Parent) (Thread)
[User Picture]From: jsn
2005-07-31 12:50 pm
но он говорит "dos mode", или [converted] [что-то], не помню.
хотя, наверное, это так бросается в глаза только если знаешь про данные конкретные грабли.
(Ответить) (Parent) (Thread)
[User Picture]From: cema
2005-07-31 08:00 pm
А надо пользовать имакс.
(Ответить) (Parent) (Thread)
[User Picture]From: livsy
2005-08-01 12:49 pm
Q: Меня девки не любят, что делать?
A: Ах ты маленький извращенец, переходи на vi!

:)
(Ответить) (Parent) (Thread)
[User Picture]From: tejblum
2005-07-31 08:45 am

Потому что надо было писать #!/usr/bin/perl -w
(Ответить) (Thread)
[User Picture]From: avva
2005-07-31 08:51 am
*безумный смех*
(Ответить) (Parent) (Thread)
[User Picture]From: ocehb
2005-07-31 08:55 am
ln -s /usr/bin/perl $'/usr/bin/perl\r'
(Ответить) (Thread)
[User Picture]From: gaal
2005-07-31 09:12 am
Yeah, that sucks, and the shell gives a completely infuriating error message too. Here's the trick I use to avoid this:

#!/usr/bin/perl -w

Once perl gets to your script, it's tolerant about lineendings, even in the shebang line.

This also turns on warnings non-lexically, which may not be what you want. In that case, use this:

#!/usr/bin/perl --
(Ответить) (Thread)
[User Picture]From: gaal
2005-07-31 09:13 am
(Oh, I see someone already suggested that. Never mind then.)
(Ответить) (Parent) (Thread)
[User Picture]From: infanticida
2005-07-31 11:07 am
(Ответить) (Thread)
[User Picture]From: 0qwerty0
2005-07-31 11:24 am
last time I worked on Unix, I configged emacs to display \r as a bold red semicolon. useful - especially since it can appear anywhere, in every data or conf file DOS has touched...
best of!
(Ответить) (Thread)
[User Picture]From: olkab
2005-07-31 11:39 am
Good idea. I'll think of using it.
(Ответить) (Parent) (Thread)
[User Picture]From: zigmar
2005-08-01 06:10 pm
Thats nice. But usually when emacs detect dos text file, it hides /r, but writes "dos mode" in status line.
(Ответить) (Parent) (Thread)
[User Picture]From: avnik
2005-07-31 12:32 pm
Я полагаю можно чуть полечить строчку в fs/binfmt_misc.c
И уравнять в правах \n и \r\n

if ((cp = strchr(bprm->buf, '\n')) == NULL)
cp = bprm->buf+BINPRM_BUF_SIZE-1;

Хотя как-то это идеологически неверно
(Ответить) (Thread)
[User Picture]From: avva
2005-07-31 01:50 pm
А правильно бы, несмотря на идеологическую неверность, по-моему ;)
(хотя пуристы наверное не позволят, да)
(Ответить) (Parent) (Thread)
[User Picture]From: bespechnoepero
2005-07-31 01:24 pm
Давно уже пора все порушить и переделать заново. Новая ОС, новые языки.
(Ответить) (Thread)
[User Picture]From: arbat
2005-07-31 01:28 pm
По-моему, правильнее "shebang".
(Ответить) (Thread)
[User Picture]From: avva
2005-07-31 01:51 pm
и так и этак есть.
(Ответить) (Parent) (Thread)
[User Picture]From: arbat
2005-07-31 02:01 pm
Ну, есть и "стекляный" (3440 раз в гугле), но все же "стеклянный" правильнее. И не только потому, что "стеклянный" в гугле встречается в 35 раз чаще.

В нашем случае частотность вполне может служить критерием правильности. "shebang" в гугле попадается на 425,000 страницах, а "shellbang" - на 1,150. Тут уже разница в 369 раз.
(Ответить) (Parent) (Thread)
[User Picture]From: bespechnoepero
2005-07-31 01:29 pm
Лучше конечно уж тогда и новые компьютеры, потому что современные тоже продукт длительного достраивания, согласовываня старых частей с новыми, куча обходных путей, компромиссов, багов.
(Ответить) (Thread)
[User Picture]From: furry
2005-07-31 02:10 pm
нда...в привычке говорить perl -w - что-то есть, определенно..;-)
(Ответить) (Thread)
[User Picture]From: avva
2005-07-31 04:21 pm
Да, теперь я понимаю ;)
(Ответить) (Parent) (Thread)
[User Picture]From: alexis_m
2005-07-31 02:17 pm
Втречал на оборот.
Админ под линуксом редактировал скрипт, выполняющийся на пользовательской машине при регистрации. Первой, как обычно, прибежала бухгалтерия. :)
(Ответить) (Thread)
[User Picture]From: rsc_gai
2005-07-31 03:54 pm
А при чём тут компьютеры. Я когда-то искал ошибки и в 1 бит.
(Ответить) (Thread)
[User Picture]From: evilmeans
2005-07-31 06:43 pm
проблема с компьютерами в том, что они делают то, что вы приказали им делать, а не то что вы хотите чтобы они делали
(Ответить) (Thread)
[User Picture]From: cema
2005-07-31 08:03 pm
Прапорщик, остановите поезд. — Поезд, стой! Раз, два.
(Ответить) (Parent) (Thread)
[User Picture]From: iseg
2005-07-31 08:29 pm
приходите к нам работать. :)
у нас с 1998 года из-под unix нельзя закоммитить текстовый файл с \r-ами
(Ответить) (Thread)
[User Picture]From: alll
2005-08-01 07:22 am
По моим наблюдениям, при взаимодействии win и *nix перловиков это самые распостранённые грабли после прав на файлы. По идее можно предохраняться пробелом в конце строки.
(Ответить) (Thread)
[User Picture]From: avva
2005-08-01 07:24 am
Я знаю, почему я на них до сих пор не наступал: потому что когда я работаю в перле и там и там, я всё равно должен помнить, что под Win мне надо писать "perl foo.pl", и поэтому под юниксом пишу то же самое и не забочусь о прямом запуске.
(Ответить) (Parent) (Thread)
[User Picture]From: potan
2005-08-01 08:03 am
Не лечится. В лучшем случае \r будет воспинят как арлумент.
(Ответить) (Parent) (Thread)
[User Picture]From: alll
2005-08-01 08:54 am

Re: В лучшем случае

Именно так.
(Ответить) (Parent) (Thread)
[User Picture]From: alll
2005-08-01 08:55 am

Re: Не лечится

Никто и не говорил "лечить". Предохраняться.
(Ответить) (Parent) (Thread)
[User Picture]From: potan
2005-08-01 08:02 am
Я в свое время в ядре поправил, что бы такие скрипты запускались.
Кстати, для FreeBSD есть хинт: написать #!/usr/bin/perl#. Он последний # обрабатывает так же, как и \n. А вот в Linux это не работает.
(Ответить) (Thread)
[User Picture]From: alll
2005-08-01 08:56 am

Править ядро - это круто

(Ответить) (Parent) (Thread)