From 89a645a42a769d503222665cdc41321e4508c8b7 Mon Sep 17 00:00:00 2001 From: jbranchaud Date: Fri, 10 Jun 2022 15:10:49 -0500 Subject: [PATCH] Add Make An Executable Ruby Script as a Ruby TIL --- README.md | 3 +- ruby/make-an-executable-ruby-script.md | 38 ++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 ruby/make-an-executable-ruby-script.md diff --git a/README.md b/README.md index c89ee7c..c70ca0c 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ pairing with smart people at Hashrocket. For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186). -_1224 TILs and counting..._ +_1225 TILs and counting..._ --- @@ -1001,6 +1001,7 @@ _1224 TILs and counting..._ - [Limit Split](ruby/limit-split.md) - [List The Running Ruby Version](ruby/list-the-running-ruby-version.md) - [Listing Local Variables](ruby/listing-local-variables.md) +- [Make An Executable Ruby Script](ruby/make-an-executable-ruby-script.md) - [Map With Index Over An Array](ruby/map-with-index-over-an-array.md) - [Mock Method Chain Calls With RSpec](ruby/mock-method-chain-calls-with-rspec.md) - [Mocking Requests With Partial URIs Using Regex](ruby/mocking-requests-with-partial-uris-using-regex.md) diff --git a/ruby/make-an-executable-ruby-script.md b/ruby/make-an-executable-ruby-script.md new file mode 100644 index 0000000..fcfc470 --- /dev/null +++ b/ruby/make-an-executable-ruby-script.md @@ -0,0 +1,38 @@ +# Make An Executable Ruby Script + +In a unix environment with Ruby available, I can make a Ruby script. To do this +I stick some code in a Ruby file, like `database_url.rb`. + +```ruby +result = `heroku pg:credentials:url DATABASE_URL --app my-app` +puts result.split("\n")[2].strip +``` + +And then execute that file with `ruby`: + +```bash +$ ruby database_url.rb +``` + +I can instead make an executable file that doesn't need to be explicitly +invoked with the `ruby` command. To do this, I need to prefix my file with a +[shebang](https://unix.stackexchange.com/a/87600/5916) for +[`ruby`](https://devcenter.heroku.com/articles/ruby-binstub-shebang). + +And I'll even just call the file `database_url` now, no file suffix. + +```ruby +#!/usr/bin/env ruby + +result = `heroku pg:credentials:url DATABASE_URL --app my-app` +puts result.split("\n")[2].strip +``` + +When executed, this script will see the first line and understand that it needs +to execute the rest of the script using `ruby` as the interpreter. + +Like any other executable, you can call it as is, like so: + +```ruby +$ database_url +```