命令后改变环境

时间:2012-01-09 21:21:37

标签: linux bash

仅针对单个命令更改环境非常简单:

DB=postgresql some_command --with --arguments

不幸的是,我必须在远程服务器上执行此操作,并且由于部署的限制,我只能编辑在 some_command之后的内容。以下情况会很好,但不会发挥作用(在Bash中):

some_command --with --arguments DB=postgresql

还有其他一些Bash黑客能够到达那里吗?

3 个答案:

答案 0 :(得分:1)

这是另一个想法,我害怕有点疯狂:

some_command --do-nothing `DB=postgresql some_command --now-really`

这个想法是反引号命令实际上会做你想要的。第一个some_command只在那里,所以命令将按您的意愿启动。你应该找到能使它做无害的参数。

如果您没有--do-nothing参数的等效内容,则可以执行以下操作:

some_command `DB=postgresql some_command --now-really; ps-grep-kill`

其中ps-grep-kill是这些命令的组合(我将详细信息留作练习),它找到即将运行some_command的父进程,并在它获得之前将其杀死机会(但在反引号some_command已经运行之后)。

答案 1 :(得分:-1)

如果您只是运行该命令,则无法更改环境 但如果你采购它,它可以:
source some_command --with --arguments DB=postgresq
速记:
. some_command --with --arguments DB=postgresql

我不希望以这种方式获取大型脚本,因为它们最终可能会比您预期的更改。所以我写了两个脚本 - 一个找到你想要改变的东西,然后输出它。另一个是非常小的,运行第一个(通常没有source)并进行更改。

但重新阅读你的问题,似乎你无法使用source。所以我认为没办法做你想做的事。

答案 2 :(得分:-1)

您可以执行export DB=postgresql全局修改环境变量吗?然后,您可以运行后续命令来获取新的环境变量。