背景
我习惯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'
然后在~/.bashrc
通话中:
[[ -z $PRJCT ]] || workon $PRJCT # switch to project if set
我知道我可以命令screen
在新 shell 上设置环境变量,如下所示,但它没有帮助,因为它不能在别名中工作:
:setenv PRJCT
2.0
答案1
如果我理解正确,您的问题是您无法找到使用 shell 别名直接与屏幕交互的方法。相反,您可以使用 向运行屏幕发送命令-X
,setenv
当然包括,例如:
$ screen -list
There are screens on:
25216.pts-45.antiriad (Attached)
$ screen -S 25216 -X setenv PRJCT 2.0
然后设置该变量,并从那时起由子 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'