69

In bash, I can do EDITOR=vim crontab -e. Can I get similar effect in Fish shell?

chicks
  • 3,915
  • 10
  • 29
  • 37
skalee
  • 803

5 Answers5

94

Don't see why this shouldn't work: env EDITOR=vim crontab -e
That bypasses the shell completely.

Wayne
  • 1,041
38
begin; set -lx EDITOR vim; crontab -e; end
16

That is from the Documentation

SOME_VAR=1 command produces an error: Unknown command "SOME_VAR=1".

Use the env command.

env SOME_VAR=1 command

You can also declare a local variable in a block and that would not bypass the shell

begin
  set -lx SOME_VAR 1
  command
end
Azd325
  • 261
10

Starting version 3.1, you can use the same syntax used in bash (EDITOR=vim crontab -e).

PR introducing the feature: https://github.com/fish-shell/fish-shell/pull/6287

2

depending on a definition of be function, this can fail

begin
  set -lx RAILS_ENV staging
  be rails r "p ENV['RAILS_ENV']"
end

In order for it to work:

function be --description 'Runs bundle exec' --no-scope-shadowing
  bundle exec $argv
end

Please, see the explanation of --no-scope-shadowing option

-S or --no-scope-shadowing allows the function to access the variables of calling functions. Normally, any variables inside the function that have the same name as variables from the calling function are "shadowed", and their contents is independent of the calling function.