Это копипаст с небольшими правками из моего блога, который я использую для сохранения информации, потенциально полезной для меня, но которую обычно забываю. Посчитал, что инфа может показаться кому-нибудь интересной.


Intro


Относительно недавно искал способ в одну строчку запустить веб-сервер в текущей директории.


На просторах Stack Overflow нашел примерно такую команду:


ruby -run -e httpd -- -p 9090 [DIR]

Что же это за загадочная опция -run и почему ее нет в мануале?



Опция -run


Разумеется, никакая это не опция. Точнее, опция, но не run. Обратите внимание на то, что перед ней стоит одно тире, а не два.


На самом деле, это опция -r с аргументом un. В свою очередь un — это файлик в стандартной библиотеке, который определяет несколько полезных функций, которые удобно использовать в однострочниках.


Одна из них — httpd которая просто запускает WebBrick, используя параметры из ARGV (в данном случае — порт и директория).


Доступность


Очевидно, это весьма старый файл, т.к. я нашел документацию к нему аж для версии 1.8.6.
Так что можно использовать без боязни.


А что еще есть?


Копирую из документации:


ruby -run -e cp -- [OPTION] SOURCE DEST
ruby -run -e ln -- [OPTION] TARGET LINK_NAME
ruby -run -e mv -- [OPTION] SOURCE DEST
ruby -run -e rm -- [OPTION] FILE
ruby -run -e mkdir -- [OPTION] DIRS
ruby -run -e rmdir -- [OPTION] DIRS
ruby -run -e install -- [OPTION] SOURCE DEST
ruby -run -e chmod -- [OPTION] OCTAL-MODE FILE
ruby -run -e touch -- [OPTION] FILE
ruby -run -e help [COMMAND]

Заключение


Полагаю, что использовать un вне однострочников вида ruby -run -e не имеет смысла, т.к. каждый из методов, определенных там, использует ARGV. Но полезно иметь на заметку, что ruby умеет это. Скорее всего, в Windows это будет работать точно так же (я вот не знаю, как в винде удалить файл или создать директорию, а тут все определено в руби).


Кстати, добавил себе в баш такую команду:


alias start-webrick='ruby -run -e httpd -- -p 9090'

Очень удобно.


Ссылка на гитхаб

Поделиться с друзьями
-->

Комментарии (17)


  1. mwambanatanga
    05.01.2017 08:44

    Это копипаст с небольшими правками из моего блога

    В первом же предложении — прямым текстом чистосердечное признание нарушения правил ресурса? Такого я ещё не видел.

    На всякий случай цитата из Правил:
    Вот список того, чего на ресурсе делать не следует
    • [...]
    • Заниматься копипастом и кросспостом. [...] не следует копипастить на «Хабр» тексты, которые ранее были опубликованы на других ресурсах (даже если вы — автор такого текста).
    • [...]


    1. Sna1L
      05.01.2017 11:53
      +6

      Главное — полезность для сообщества. Даже если я немного нарушил правила:)
      На крайний случай, пусть меня накажет администрация, если это принципиально


    1. am-amotion-city
      06.01.2017 12:31
      -1

      Первая за долгое время действительно полезная заметка, причем в неожиданной теме, казалось бы, лежащей на поверхности, — и тут же вылезает какой-нибудь хранитель бессмысленных правил говноресурсика.


      1. Sersoftin
        06.01.2017 21:16

        Как интересно вы про хабр пишите :)


        1. am-amotion-city
          06.01.2017 21:49

          Я еще и грамотно это делаю, в отличие, так сказать, от.


          «Пишете», а не «пишите» — на будущее. Так можно и дожить до осознания, что говнохабр — место для неудачников и пришедших почесать языком троллей, вот уже лет эдак пять.


          1. Sersoftin
            07.01.2017 02:42

            Прошу прощения за неграмотность.


  1. rusnasonov
    05.01.2017 23:09

    А ещё вебсервер в одну строчку можно так:


    python -m http.server 8000 (python 3)


    1. foxmuldercp
      06.01.2017 01:07

      У меня где-то в загашнике валялся веб сервер на bash'е.
      А на всяких перлах да питонах штатные библиотеки есть, аналоги этим рубишным


    1. AFakeman
      06.01.2017 14:38

      А для чего запускать веб-сервер таким образом? Он разве не запустится в режиме "Hello, World!"?


      1. kmeaw
        06.01.2017 21:32

        Чтобы, например, быстро отдать коллеге (соседу по локалке) какой-нибудь файл из рабочей директории проекта по HTTP.


      1. Sna1L
        06.01.2017 21:55

        Я не уверен, но по идее эта команда работает так же, как и указаннаяя мною, т.е. сервер просто будет отдавать файлы из директории.


        Лично мой use-case был таким:
        Есть js-либа, которую мы форкнули от основого репозитория для интеграции в наш продукт. Соотв все правки происходили в форке, а проверялись в продукте.
        Более конкретно: у меня было запущено два сервера: основной проект и в папке с либой. Подключалась она явным указанием локалхоста с нужным портом.


  1. uniqm
    09.01.2017 13:38
    -2

    ммм… а почему просто не запустить скрипт руби. внутри которого любая магия?
    например, «ruby my_script.rb [параметры командной строки]», а уже внутри файла и валидаторы параметров командной строки, и их дефолтные значения на случай незаполненности, и запуск сервера и любой другой код.


    1. Sna1L
      09.01.2017 16:24

      может быть потому, что для этого нужно этот самый скрипт написать?


      1. uniqm
        09.01.2017 17:47

        И чем его содержимое в простейшем случае будет отличаться от Вашего однострочника? \\Вопрос риторический
        Я решал подобные задачи через скрипты (и вообще скрипты иногда пишу) — все быстро и славненько получается. Без «потолка» в развитии инструмента, в отличии от однострочников.


        1. Sna1L
          09.01.2017 19:31

          Вы пытаетесь меня загнать в спор о велосипедах? Я люблю велосипеды, если они не мешают мне работать.


          Последовательность моих действий:


          1. гугл, ruby webrick oneliner
          2. C-c
          3. C-v
          4. Добавить алиас в баш, если хочется

          Последовательность действий при разработке велосипеда


          1. Гугл, webrick ruby
          2. открыть документацию
          3. Создать новый файл
          4. Написать код, который запустит чертов веб-сервер, который мне нужен буквально на часик
          5. Сделать файл исполняемым
          6. Сохранить так, чтобы он был в PATH.
          7. PROFIT. Вы великолепны.

          Про "потолок" — просто оставлю это здесь.


          1. uniqm
            09.01.2017 22:10

            Что первый Ваш ответ, что второй — желчь какая-то. Считаю не заслужил ;) И причем тут велосипеды, я не понял… Искусственный потолок — так же плохо, как и пушкой по воробьям. Почти всегда, начиная с простого скрипта-хелпера — затем приходит аппетит ;)
            PS а 7 пунктов это «пять» ;)


            1. Sna1L
              10.01.2017 14:23

              Простите, не хотел показаться желчным.


              "Пушкой по воробьям" — это как раз делать свои поделки для выполнения элементарных задач. Давайте тогда не использовать cp, а напишем свой скрипт с "Дураком" и барышнями.


              Всему свое место. Запустить веб-сервер в текущей папке — типичный use-case. Редко что-то дополнительное нужно.


              К тому же, возможности un.rb не ограничиваются веб-сервером. Это еще и имплементация "юниксовых" утилит вроде вышеупомянутой cp