Last Updated: February 25, 2016
· cloud8421

Running commands with local variables on the fish shell

When using the Fish shell, you may need to run commands with local variables, like the following (Bash):

RAILS_ENV=staging rake db:migrate

This doesn't work in Fish, as setting a local variable follows another syntax, using the set command.

You can achieve the same result with the following syntax:

begin; set -lx RAILS_ENV staging; rake db:migrate; end

The flags set the variable as local (l) and export it to child processes (x). You may not need the latter depending on the command you want to run.

It's a bit verbose, so you can define a function to make it easier

function v
  set -lx $args

Then you can type:

begin; v RAILS_ENV staging; rake db:migrate; end

1 Response
Add your response


Can't you just run env RAILS_ENV=staging rake db:migrate or (since rake allows that) rake db:migrate RAILS_ENV=staging

over 1 year ago ·