Shebang myth

Sep 16, 2010 13:47


Запишу-ка ссылку, чтобы снова не забыть. А то уже дважды терял, приходилось искать заново.

The #! magic, details about the shebang/hash-bang mechanism on various Unix flavours
Shebang и с чем его едят )

суеверия, занудство, ссылка

Leave a comment

Comments 4

slobin September 16 2010, 11:59:24 UTC
А я тут недавно изучил, как делать аналог шебанга в современных виндах. Мои старые представления об этом основывались на древнем-древнем command.com от ms-dos, а там всё совсем плохо. С современным cmd.exe чуточку легче, хотя всё равно ужас (но уже не ужас-ужас-ужас). Вкратце:

Если вы готовы терпеть, что первая строчка вашего командного файла будет отэхана на консоль, то это делается так:

#! python "%~f0" %*

import sys
print sys.argv

Где файл #!.bat содержит три символа @%* (в моём консольном шрифте это напоминает лежащую на боку шляпу волшебника). К сожалению, если ваш язык понимает в качестве комментариев именно # и ничего больше, то избавиться от эха первой строчки, похоже, нельзя. Если вы пользуетесь лиспом, где комментарии традиционно начинаются с точки с запятой, вам повезло немного больше:

;@newlisp "%~f0" %*
;@exit /b

(println (main-args))
(exit)

Правда, тут всё зависит от того, как именно данный конкретный лисп обращается с пробелами в командной строке. Из трёх имеющихся у меня сейчас без проблем отработал только newlisp ( ... )

Reply

gegmopo4 September 16 2010, 12:24:30 UTC
Какое могучее извращение!

Главное, бессмысленное, ведь можно же просто рядом с something.lisp положить something.cmd, в котором:
@newlisp something.lisp %*

Ну или как там можно вставить имя текущего скрипта с заменой .cmd на .lisp.

И гложут меня смутные подозрения, что в современной Windowds таки можно проассоциировать файл не только в gui. По крайней мере в XP они очень сильно продвинулись насчёт шелла, а в Vista ещё добавили.

Reply

gegmopo4 December 3 2010, 20:50:43 UTC
Вот ещё облом для питона:

@python -x "%~f0" %*

Reply


slobin September 16 2010, 13:28:57 UTC

ведь можно же просто рядом с something.lisp положить something.cmd

Один файл -- это не два файла, один файл гораздо более maintainable.

в современной Windowds таки можно проассоциировать файл не только в gui

Это да, это действительно обесценивает идею. У меня, собст-но, все часто используемые интерпретаторы проассоциированы (штук пять, но я маньяк ;-). (/me смотрит в %PATHEXT%) А, нет, всего три, не считая стандартных виндовых. То есть реально я пишу скрипты на трёх языках, остальные так, поиграться.

... Я не приобрёл ещё достаточно невежества ...

Reply


Leave a comment

Up