如何从bash设置`screen`环境变量?

cpr*_*prn 4 gnu-screen environment-variables

背景

virtualenv用来在环境“1.0”和“2.0”之间切换。
screen用来管理终端。
当我在一个环境中工作时,我希望所有新screen窗口都从这个环境开始。

可以 bash 指示screen在新的 shell 实例上设置环境变量,所以我可以创建一个类似于这个的别名:

alias one='export PRJCT=1.0; screen-magic-setenv PRJCT=1.0; workon 1.0'
alias two='export PRJCT=2.0; screen-magic-setenv PRJCT=2.0; workon 2.0'
Run Code Online (Sandbox Code Playgroud)

然后在~/.bashrc电话中:

[[ -z $PRJCT ]] || workon $PRJCT # switch to project if set
Run Code Online (Sandbox Code Playgroud)

我知道我可以命令screen在如下所示的新 shell 上设置环境变量,但它没有帮助,因为它不能在别名中工作:

:setenv PRJCT
2.0
Run Code Online (Sandbox Code Playgroud)

mr.*_*tic 8

如果我理解正确,您的问题是您找不到使用 shell 别名直接与屏幕交互的方法。相反,您可以使用 将命令发送到正在运行的屏幕-Xsetenv当然包括,例如:

$ screen -list
There are screens on:
    25216.pts-45.antiriad      (Attached)

$ screen -S 25216 -X setenv PRJCT 2.0
Run Code Online (Sandbox Code Playgroud)

然后设置该变量,并且从那时起将被子 shell 继承,与:setenv. 如果您使用-S设置合理的不同会话名称,您的任务可能会更容易。该变量STY保存当前屏幕会话。

如果您仅screen -X setenv PRJCT 2.0 在屏幕会话中运行,省略-S,它将应用于该屏幕实例。

alias one='export PRJCT=1.0; screen -X setenv PRJCT 1.0; workon 1.0'
Run Code Online (Sandbox Code Playgroud)