【问题标题】:Bash command line env varsBash 命令行环境变量
【发布时间】:2014-03-31 21:46:57
【问题描述】:

如果你这样做(在 bash 中):

ENV_ONE=1 ENV_TWO=2 command

command 将在其调用中接受并使用环境变量。但是,如果你这样做:

ENV_ONE=1 ENV_TWO=2 clear && command

clear 将使用命令行中设置的环境变量,它们不会传递给命令。如果您想执行以下操作,这是一个问题:

alias command='clear && command'

我用谷歌搜索了一遍,但找不到在命令之前表示环境变量的 bash 内置函数。我的问题是:如何将 CLI 声明的环境变量传递给第二个命令?

【问题讨论】:

  • clear THEN 设置它们? clear && ENV1=.. ENV2=... command?
  • 仅仅因为你可以在没有任何中间逻辑的情况下进行多个声明,我不明白你为什么会这样做,因为它与 bash 中的其他任何东西都不吻合。所以就做ENV_ONE=1 && ENV_TWO=2 && clear && commandENV_ONE=1; ENV_TWO=2; clear && command 取决于你是否真的需要他们相互依赖
  • @BroSlow,ENV_ONE=1; fooENV_ONE=1 foo 不同。它们做不同的事情:前者设置一个 shell 变量,即使在命令完成后仍然存在;后者只为执行命令foo设置环境变量。
  • @CharlesDuffy 公平点,支持the other guy's 回答

标签: linux macos bash shell


【解决方案1】:

使用别名的经验法则是“如果您必须询问,请改用函数”。由于command 与内置冲突,我将调用您的命令foo

foo() { clear && command foo "$@"; }
ENV_ONE=1 ENV_TWO=2 foo

这按预期工作。

【讨论】:

  • +1 -- 这正是我们在#bash 中向提出此问题的人提供的答案。
  • 关于 SO 的大多数好的 bash 答案都是由 Freenode #bash 提供的。 :P
  • 这正是我一直在寻找的答案!抱歉,我没有对我的条款更加小心(选择 command 作为通用命令名称)谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 2015-12-24
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多