diff --git a/README.md b/README.md index e557ccc..e641ecd 100644 --- a/README.md +++ b/README.md @@ -131,6 +131,7 @@ smart people at [Hashrocket](http://hashrocket.com/). - [Percent Notation](ruby/percent-notation.md) - [Question Mark Operator](ruby/question-mark-operator.md) - [Rake Only Lists Tasks With Descriptions](ruby/rake-only-lists-tasks-with-descriptions.md) +- [Replace The Current Process With An External Command](ruby/replace-the-current-process-with-an-external-command.md) - [Squeeze Out The Extra Space](ruby/squeeze-out-the-extra-space.md) - [Summing Collections](ruby/summing-collections.md) - [Uncaught Exceptions In Pry](ruby/uncaught-exceptions-in-pry.md) diff --git a/ruby/replace-the-current-process-with-an-external-command.md b/ruby/replace-the-current-process-with-an-external-command.md new file mode 100644 index 0000000..bba4f7a --- /dev/null +++ b/ruby/replace-the-current-process-with-an-external-command.md @@ -0,0 +1,29 @@ +# Replace The Current Process With An External Command + +Ruby's +[`Kernel#exec`](http://ruby-doc.org/core-2.2.3/Kernel.html#method-i-exec) +method can be used to run an external command. What differentiates it from +executing commands with the likes of back ticks or `%x[]` is that instead of +forking a child process, it replaces the current process. + +For instance, the following ruby script, when executed, will replace itself +with an `irb` session. + +```ruby +Kernel.exec('irb') +``` + +The external command will even benefit from the existing environment. For +example, if I set the following environment variable + +```bash +$ export GREETING=hello +``` + +and then execute a file containing + +```ruby +Kernel.exec('echo $GREETING') +``` + +I can expect to see `hello` printed to stdout.