我正在尝试编写一个.screenrc文件,我可以用它来设置特定项目的开发 - 它将启动几个屏幕,cd到正确的位置,在编辑器中打开正确的文件,并设置一些测试所需的环境变量.
我无法让环境设置工作..我已经尝试过这个`~/.screenrc:
setenv PATH ~/src/my_proj/bin/:$PATH
Run Code Online (Sandbox Code Playgroud)
这不起作用,我认为问题是在screen设置之后PATH,常规shell初始化脚本会启动并在我身上进行更改.
我不想禁用常规shell init脚本.shell初始化setenv 后有没有办法制作屏幕?或者,可以屏幕将变量设置为只读吗?
我会用一些bash魔法代替它.尝试在~/.screenrc文件中添加以下内容:
screen -t "window" bash -ic 'PATH=~/src/my_proj/bin/:$PATH bash'
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,并为新创建的窗口设置此设置Ctrl-a Ctrl+c或Ctrl-a c查看我对其他帖子的回答:https://stackoverflow.com/a/21717641/1413849
对我来说这条线
setenv PATH /home/someuser/bin:$PATH
Run Code Online (Sandbox Code Playgroud)
在 screenrc 文件中做到了这一点。
我认为 '~' 到 '/home/someuser' 的扩展是 bash 特定的,在 screenrc 中不起作用。
screen一旦 shell 进程启动,就无法更改该进程的环境变量,也没有任何方法可以使环境变量变为只读(值存储在每个进程的内存中,并且每个进程都可以完全访问它们)。
(好吧,可能有一些丑陋的特定于系统的方法来做到这一点,但类 Unix 系统的设计就是为了阻止你这样做。)
您需要修改 shell 的初始化脚本,以便它保留 的现有值$PATH,可能会添加它,而不是将其设置为某个新值而忽略其现有值。
如果您想有条件地执行此操作,可以测试 是否存在$STY,只有当 shell(或任何其他进程)在 下运行时才设置该值screen。
另外,screen的setenv命令似乎无法识别该~字符。我尝试添加一个类似于setenv临时的screenrc,并$PATH包含一个文字~字符。bash似乎可以识别~中的语法$PATH,但其他 shell 不能识别。将 替换~为$HOME,它screen确实可以识别。