如何将环境变量传递给dtach?

如何将环境变量传递给dtach?

有什么想法如何将环境变量放入dtach?默认情况下它们似乎不会被继承......

FOO=bar && dtach -c /tmp/a-socket env
# env does not include $FOO

[编辑]

由于原因(TM),我需要在那里有某种命令分隔符。要么是 ;或&&。

(我现在意识到这不是一个特定于 dtach 的问题,它只是反映了我对 shell 的理解很差......)

答案1

其实export也不需要。export意思是:

标记每个名称以自动导出到随后执行的命令的环境。如果提供了 VALUE,请在导出之前分配 VALUE。

您可以使用以下命令架构公开环境变量:

FOO=bar dtach -c /tmp/a-socket env

它不会造成副作用下一个子进程(因此执行的命令)将继承FOO=bar环境变量。

评论您的第一次执行尝试。&&在配置环境变量和运行进程之间添加运算符是没有意义的。它不运行任何内容(退出代码 == 0),然后在没有环境变量的情况下运行您的命令。

答案2

在您的示例中,&&它充当命令分隔符(具体来说,如果第一个命令成功,则仅执行第二个命令)。这可能不是您想要的,请考虑以下示例:

name=value;$command
name=value||$command
name=value&&$command

在所有这三种情况下,名称都被设置为当前 shell 中的值,在第一种和第三种情况下,命令 $command 会被执行,因为赋值永远不会失败,在第二种情况下,$command 不会被执行,因为赋值永远不会失败(带有保留变量的奇怪 shell 中可能存在的异常)。在任何情况下,变量都不会传递给 $command。

name=value;export name;$command
export name=value;$command

省略其他命令分隔符的类似示例,这些示例添加一个导出,将变量传递给 $command 以及此后在当前会话中执行的所有其他命令。

name=value $command

请注意缺少命令分隔符。在这种情况下,变量将传递给 $command 并且仅传递给命令,它不在当前 shell 中使用。

答案3

抱歉,回答我自己的问题:如果您确实必须有一个&∨命令分隔符,那么您别无选择,只能使用export

export FOO=bar; dtach -c /tmp/a-socket env
# this time env will show FOO=bar

; unset FOO如果你不想污染你的主壳,你可以在最后添加一个...

相关内容