ruby -run

29 October 2024

Photo by afiq fatah on Unsplash

Ruby is well known as a language that is easy to use from the surface but is deep and complex underneath. That’s what we know and love about it. Its standard library has a similar design and contains hidden gems. One of the gems I’ve learned about recently is un. It’s designed to be a command line utility executed directly from ruby. This is its usage description:

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 wait_writable -- [OPTION] FILE ruby -run -e mkmf -- [OPTION] EXTNAME [OPTION] ruby -run -e httpd -- [OPTION] [DocumentRoot] ruby -run -e colorize -- [FILE] ruby -run -e help [COMMAND]

This means that if you type

ruby -run -e help httpd

you’ll see a help message that will describe how that command works.

Most of the commands have pretty limited utility. They seem to be portable UNIX utilities for use when Ruby is present but a UNIX environment is not. In fact, the package description is “Utilities to replace common UNIX commands in Makefiles etc.”. Perhaps they’re useful in embedded systems (I understand that Ruby is commonly used for embedded systems in Japan).

The two that stand out to me are httpd and colorize. httpd is very useful. It’s become my go-to utility when I need to quickly serve files over HTTP.

Just type

ruby -run -e httpd .

press “Enter” and boom you’re done! You should see something like this on your screen:

[2025-01-12 13:43:26] INFO  WEBrick 1.6.1 [2025-01-12 13:43:26] INFO  ruby 2.7.5 (2021-11-24) [arm64-darwin24] [2025-01-12 13:43:26] INFO  WEBrick::HTTPServer#start: pid=27808 port=8080

Now you can open localhost:8080 in your browser and see the files you’ve served.

colorize prints out the Ruby code of any file you give it with syntax highlighting. I’ve not used it in a practical setting yet. But it might be useful when looking through Ruby files in a terminal as an alternative to cat.