10

我正在尝试编写一个 .screenrc 文件,可用于为特定项目的开发设置 - 它会启动几个屏幕,cd 到正确的位置,在编辑器中打开正确的文件,并设置一些测试所需的环境变量。

我无法让环境设置工作..我试过把它放进去`~/.screenrc

setenv PATH ~/src/my_proj/bin/:$PATH

这不起作用,我认为问题是在screensets之后PATH,常规的 shell 初始化脚本会启动并在我身上进行更改。

我不想禁用常规的 shell 初始化脚本。shell初始化setenv 有什么方法可以制作屏幕吗?或者,屏幕可以将变量设置为只读吗?

4

4 回答 4

6

我会用一些 bash 魔法来代替。尝试将这样的内容添加到您的~/.screenrc文件中:

screen -t "window" bash -ic 'PATH=~/src/my_proj/bin/:$PATH bash'

有关更多详细信息并使用此设置为新创建的窗口设置Ctrl-a Ctrl+cCtrl-a c查看我对不同帖子的回答:https ://stackoverflow.com/a/21717641/1413849

于 2014-02-12T03:04:55.923 回答
5

对我来说这条线

setenv PATH /home/someuser/bin:$PATH

在 screenrc 文件中成功了。

我认为 '~' 到 '/home/someuser' 的扩展是特定于 bash 的,并且在 screenrc 中不起作用。

于 2017-02-14T17:26:36.083 回答
3

一旦 shell 进程启动,就screen无法更改环境变量,也无法将环境变量设为只读(值存储在每个进程的内存中,每个进程都可以完全访问它们) .

(嗯,可能有一些丑陋的特定于系统的方法来做,但这是类 Unix 系统旨在阻止你做的事情。)

您需要修改 shell 的初始化脚本,使其保留现有值$PATH,可能会添加到它,而不是将其设置为某个新值而忽略其现有值。

如果您想有条件地执行此操作,您可以测试是否存在$STY,仅当 shell(或任何其他进程)在 下运行时才设置screen

此外,screen' 的setenv命令似乎无法识别该~字符。我尝试添加一个类似于setenv临时的screenrc,并$PATH包含一个文字~字符。bash似乎可以识别 中的~语法$PATH,但其他 shell 不能。替换~by $HOME,它screen确实可以识别。

于 2014-02-11T15:28:19.923 回答
0

对我来说,我只是将环境设置为~/.bash_profile~/.bashrc

case $TERM in
screen*)
  export PS1='[\u:screen \w]\$ '
  ;;
*)
  export PS1='[\u \w]\$ '
  ;;
esac

它奏效了,享受它。

于 2017-02-15T06:33:43.387 回答