Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

xrepo env shell bugs #1349

Closed
xq114 opened this issue Apr 20, 2021 · 10 comments
Closed

xrepo env shell bugs #1349

xq114 opened this issue Apr 20, 2021 · 10 comments
Milestone

Comments

@xq114
Copy link
Contributor

xq114 commented Apr 20, 2021

注:如果是问题报障或者特性请求,请选择报告缺陷特性请求模板,否则一律不回复。

描述讨论详情

#1340

这里我提交的patch还是不行,windows上经测试无论何时拉起的都是cmd(原因是xrepo实际为xrepo.bat,powershell运行xrepo就会调用cmd去运行,所以取得的环境也是cmd的环境),还需要一个xrepo.ps1供powershell自动调用。powershell在launch的时候使用function可能也不行,anaconda的做法是注册一个Invoke-Conda()作为powershell函数,然后conda作为Invoke-Conda的alias,调用conda activate base并不是conda.exe而是Invoke-Conda(activate, base)

linux(ubuntu 20.04)上经测试bash并不会带有提示符,因为环境变量的PS1在加载~/.bashrc的时候会被重置。anaconda的做法是注册一个conda()作为bash函数,调用conda activate base实际上是conda(activate, base),xrepo也可以效仿,但效果如何需要进一步评估

目前看用os.exec带起一个shell只对cmd完全有效

@waruqi
Copy link
Member

waruqi commented Apr 20, 2021

linux(ubuntu 20.04)上经测试bash并不会带有提示符,因为环境变量的PS1在加载~/.bashrc的时候会被重置。anaconda的做法是注册一个conda()作为bash函数,调用conda activate base实际上是conda(activate, base),xrepo也可以效仿,但效果如何需要进一步评估

我这测试可以么,自己设置的 prompt 可以生效,就是 os.getenv("PS1") 取不到而已。话说这默认的 "\\W $ " 是啥?

[test] \W $

PS1 取不到,就直接 [test] > 不就好了,不想搞太复杂,尽量用 > 替代 $ ,不仅可以跟 原生的 bash 环境区分开来,知道当前是在 xrepo env下,也跟 xmake l> prompt 保持一致


edit: \\W 是 curdir 哈,我看就 mac 下有效呢,,linux 没效果。。

@waruqi
Copy link
Member

waruqi commented Apr 20, 2021

这里我提交的patch还是不行,windows上经测试无论何时拉起的都是cmd(原因是xrepo实际为xrepo.bat,powershell运行xrepo就会调用cmd去运行,所以取得的环境也是cmd的环境),还需要一个xrepo.ps1供powershell自动调用。powershell在launch的时候使用function可能也不行,anaconda的做法是注册一个Invoke-Conda()作为powershell函数,然后conda作为Invoke-Conda的alias,调用conda activate base并不是conda.exe而是Invoke-Conda(activate, base)

这还得搞 activate xxx 啥的也很蛋疼~ 如果要搞 xrepo.ps1,那在 cmd/ps 下执行 xrepo 如果选择正确的 .bat/.ps1 后缀版本呢?

@xq114
Copy link
Contributor Author

xq114 commented Apr 20, 2021

这还得搞 activate xxx 啥的也很蛋疼~ 如果要搞 xrepo.ps1,那在 cmd/ps 下执行 xrepo 如果选择正确的 .bat/.ps1 后缀版本呢?

powershell里面运行xrepo会优先找xrepo.ps1,cmd里面就只会找xrepo.bat

@waruqi
Copy link
Member

waruqi commented Apr 20, 2021

这还得搞 activate xxx 啥的也很蛋疼~ 如果要搞 xrepo.ps1,那在 cmd/ps 下执行 xrepo 如果选择正确的 .bat/.ps1 后缀版本呢?

powershell里面运行xrepo会优先找xrepo.ps1,cmd里面就只会找xrepo.bat

那就帮忙在 scripts里加个就好了

@xq114
Copy link
Contributor Author

xq114 commented Apr 24, 2021

现在发现cmd也有问题,在cmd里面按方向键无法滚动到之前的命令,所以用os.exec拉cmd也不行,还是要加一个命令来退出环境

custom environment功能有点类似于tab completion,都是shell的扩展,是否可以考虑做一个抽象来管理所有shell扩展?

> xmake init
hooking tab completion...
hooking environment management...
file changed: ...profile.sh # or ...profile.ps1 on windows
> xrepo env shell  # or xrepo activate .
[dir] > xrepo deactivate
> 

conda对tab completion和environment management也是放在一起处理的

@waruqi
Copy link
Member

waruqi commented Apr 24, 2021

先这么凑合着用吧,暂时没精力细搞,等之后有时间了再看看

@waruqi waruqi added this to the v2.5.5 milestone Apr 25, 2021
@waruqi
Copy link
Member

waruqi commented Apr 29, 2021

#1372
#1368

@waruqi waruqi closed this as completed Apr 29, 2021
@waruqi waruqi modified the milestones: v2.5.5, v2.5.4 Apr 29, 2021
@waruqi
Copy link
Member

waruqi commented May 6, 2021

用 xrepo.ps1,有些系统上会有下面这个问题,用户报上来的

PS C:\workspace> xrepo
xrepo : 无法加载文件 c:\tools\xmake\xrepo.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com
/fwlink/?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:1 字符: 1

  • xrepo
  •   + CategoryInfo          : SecurityError: (:) [],PSSecurityException
      + FullyQualifiedErrorId
    
    

目前只能通过用户手动运行

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

来解决,不知道有没有更好的方式

@xq114
Copy link
Contributor Author

xq114 commented May 7, 2021

目前只能通过用户手动运行

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

来解决,不知道有没有更好的方式

可以在tab completion的profile里面加一行运行这个命令;但不如让用户自己加

其实使用get.ps1来安装xmake也是需要预先运行这个的,这个只要设置一次就行。只有直接从安装包安装会出现这个问题,有一个解决方法是把xrepo.ps1和tab completion都放在get.ps1脚本里面下载,用安装包安装的用户可以之后再安装tab completion和xrepo.ps1

@waruqi
Copy link
Member

waruqi commented May 7, 2021

目前只能通过用户手动运行

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

来解决,不知道有没有更好的方式

可以在tab completion的profile里面加一行运行这个命令;但不如让用户自己加

其实使用get.ps1来安装xmake也是需要预先运行这个的,这个只要设置一次就行。只有直接从安装包安装会出现这个问题,有一个解决方法是把xrepo.ps1和tab completion都放在get.ps1脚本里面下载,用安装包安装的用户可以之后再安装tab completion和xrepo.ps1

那也可以,至少大部分 xrepo 命令和操作,xrepo.bat 足够了,现在全局中断 体验不是很好。。只有 xrepo env shell 才需要 xrepo.ps1 ,安装包安装的用户,如果执行 xrepo env shell ,如果检测到是执行的 xrepo.bat,可以在 lua 里面 加个提示让用户自己选择是否下载 xrepo.ps1 ,或者直接内部lua脚本下载安装进去

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants