А я тут недавно изучил, как делать аналог шебанга в современных виндах. Мои старые представления об этом основывались на древнем-древнем command.com от ms-dos, а там всё совсем плохо. С современным cmd.exe чуточку легче, хотя всё равно ужас (но уже не ужас-ужас-ужас). Вкратце:
Если вы готовы терпеть, что первая строчка вашего командного файла будет отэхана на консоль, то это делается так:
#! python "%~f0" %*
import sys print sys.argv
Где файл #!.bat содержит три символа @%* (в моём консольном шрифте это напоминает лежащую на боку шляпу волшебника). К сожалению, если ваш язык понимает в качестве комментариев именно # и ничего больше, то избавиться от эха первой строчки, похоже, нельзя. Если вы пользуетесь лиспом, где комментарии традиционно начинаются с точки с запятой, вам повезло немного больше:
;@newlisp "%~f0" %* ;@exit /b
(println (main-args)) (exit)
Правда, тут всё зависит от того, как именно данный конкретный лисп обращается с пробелами в командной строке. Из трёх имеющихся у меня сейчас без проблем отработал только newlisp
( ... )
Главное, бессмысленное, ведь можно же просто рядом с something.lisp положить something.cmd, в котором: @newlisp something.lisp %*
Ну или как там можно вставить имя текущего скрипта с заменой .cmd на .lisp.
И гложут меня смутные подозрения, что в современной Windowds таки можно проассоциировать файл не только в gui. По крайней мере в XP они очень сильно продвинулись насчёт шелла, а в Vista ещё добавили.
ведь можно же просто рядом с something.lisp положить something.cmd
Один файл -- это не два файла, один файл гораздо более maintainable.
в современной Windowds таки можно проассоциировать файл не только в gui
Это да, это действительно обесценивает идею. У меня, собст-но, все часто используемые интерпретаторы проассоциированы (штук пять, но я маньяк ;-). (/me смотрит в %PATHEXT%) А, нет, всего три, не считая стандартных виндовых. То есть реально я пишу скрипты на трёх языках, остальные так, поиграться.
Comments 4
Если вы готовы терпеть, что первая строчка вашего командного файла будет отэхана на консоль, то это делается так:
#! python "%~f0" %*
import sys
print sys.argv
Где файл #!.bat содержит три символа @%* (в моём консольном шрифте это напоминает лежащую на боку шляпу волшебника). К сожалению, если ваш язык понимает в качестве комментариев именно # и ничего больше, то избавиться от эха первой строчки, похоже, нельзя. Если вы пользуетесь лиспом, где комментарии традиционно начинаются с точки с запятой, вам повезло немного больше:
;@newlisp "%~f0" %*
;@exit /b
(println (main-args))
(exit)
Правда, тут всё зависит от того, как именно данный конкретный лисп обращается с пробелами в командной строке. Из трёх имеющихся у меня сейчас без проблем отработал только newlisp ( ... )
Reply
Главное, бессмысленное, ведь можно же просто рядом с something.lisp положить something.cmd, в котором:
@newlisp something.lisp %*
Ну или как там можно вставить имя текущего скрипта с заменой .cmd на .lisp.
И гложут меня смутные подозрения, что в современной Windowds таки можно проассоциировать файл не только в gui. По крайней мере в XP они очень сильно продвинулись насчёт шелла, а в Vista ещё добавили.
Reply
@python -x "%~f0" %*
Reply
ведь можно же просто рядом с something.lisp положить something.cmd
Один файл -- это не два файла, один файл гораздо более maintainable.
в современной Windowds таки можно проассоциировать файл не только в gui
Это да, это действительно обесценивает идею. У меня, собст-но, все часто используемые интерпретаторы проассоциированы (штук пять, но я маньяк ;-). (/me смотрит в %PATHEXT%) А, нет, всего три, не считая стандартных виндовых. То есть реально я пишу скрипты на трёх языках, остальные так, поиграться.
... Я не приобрёл ещё достаточно невежества ...
Reply
Leave a comment