Linux 命令后改变环境

Linux 命令后改变环境,linux,bash,Linux,Bash,仅为一个命令更改环境非常简单: DB=postgresql some_command --with --arguments 不幸的是,我必须在远程服务器上执行此操作,并且由于部署的限制,我只能编辑some_命令之后的内容。以下内容很好,但不起作用(在Bash中): 还有其他Bash黑客吗?如果只运行该命令,它无法更改环境。 但如果你找到它,它可以: source some_命令--with--arguments DB=postgresq 速记: 。一些命令--带有--arguments DB=

仅为一个命令更改环境非常简单:

DB=postgresql some_command --with --arguments
不幸的是,我必须在远程服务器上执行此操作,并且由于部署的限制,我只能编辑some_命令之后的内容。以下内容很好,但不起作用(在Bash中):


还有其他Bash黑客吗?

如果只运行该命令,它无法更改环境。
但如果你找到它,它可以:
source some_命令--with--arguments DB=postgresq

速记:
。一些命令--带有--arguments DB=postgresql

我不喜欢用这种方式来编写大型脚本,因为这样一来,它们的变化可能会超出您的预期。因此,我将编写两个脚本-一个找到您想要更改的内容,并将其输出。另一个是非常小的一个,它运行第一个(通常没有
源代码
)并进行更改


但是重新阅读您的问题,您似乎无法使用
源代码
。所以我看不出有什么办法可以做你想做的。

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

这里还有另一个想法,恐怕有点疯狂:

some_command --do-nothing `DB=postgresql some_command --now-really`
其思想是,反引号命令实际上将执行您想要的操作。第一个
some_命令
仅在那里,因此该命令将根据需要启动。您应该找到一些参数,让它做一些无害的事情

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

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

其中,
ps grep kill
是这些命令的组合(我把细节留作练习),它找到父进程,该进程正准备运行
some_命令
,并在它有机会运行之前(但在反引用的
some_命令
已经运行之后)将其杀死。

您的限制是什么?具体来说,哪些约束条件意味着您不能使用上面的第一个版本?在我的例子中,“some_命令”是“bundle install”。我只有一个配置选项可以传递任意参数。如果您不想让它改变环境,请使用一个子shell:
(source some_command…
。我认为在这里,子shell和我的答案实际上都没有用。他想要的是以
某个命令开始的东西,而不是别的。很明显,但就是这样:我做不到。聪明的解决方法!不幸的是,我的“some_命令”是“bundle install”,它没有任何接近--do-nothing的参数。好的,我添加了一个解决方法。但它变得更加丑陋。ps grep kill方法很有趣,但对我来说太粗糙了。然而,第一个解决方案可能会派上用场,所以我接受这个答案。
some_command `DB=postgresql some_command --now-really; ps-grep-kill`