如何在 fish shell 中为一个命令设置环境变量?

如何在 fish shell 中为一个命令设置环境变量?

在 bash 中,我可以这样做EDITOR=vim crontab -e。我可以在 Fish shell 中获得类似的效果吗?

答案1

begin; set -lx EDITOR vim; crontab -e; end

答案2

不明白为什么这不起作用: env EDITOR=vim crontab -e
这完全绕过了 shell。

答案3

这是从文档

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

使用 env 命令。

env SOME_VAR=1 command

您还可以在块中声明局部变量,这样就不会绕过 shell

begin
  set -lx SOME_VAR 1
  command
end

答案4

根据be函数的定义,这可能会失败

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

为了使其正常工作:

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

请参阅--no-scope-shadowing 选项

-S 或 --no-scope-shadowing 允许函数访问调用函数的变量。通常,函数内任何与调用函数中的变量同名的变量都会被“隐藏”,并且其内容与调用函数无关。

相关内容