xiao-bai-shu 发表于 2024-11-3 03:41

C++ system() 命令 修改当前运行环境变量

最近因为 conda 的命令太长,用起来不顺手,bat 的文本处理功能又太鸡肋,用 C++ 写了个 kd.exe,主要功能如下:
kd a = conda activate
kd d = conda deactivate
kd s <...> 退出所有嵌套环境直至 base,然后再激活指定环境
kd <other_commands>:执行 conda other_commands
但是只有 kd list,kd create 等不修改环境变量的命令有效。conda.exe 修改的环境变量和文件未知,我也没有必要重新实现一个 conda.exe。
命令执行语句是 system("call conda " + command)
如何才能使 system() 命令能够将所有改变应用到执行 kd.exe 的命令行进程?

三滑稽甲苯 发表于 2024-11-3 08:19

这种小功能一般来说用 shell 脚本更加合适

lipingtao 发表于 2024-11-3 10:11

学习一下不同思考

0Ling0 发表于 2024-11-3 13:10

重新启动程序?窗口重新创建session会刷新环境变量

xiao-bai-shu 发表于 2024-11-3 13:39

三滑稽甲苯 发表于 2024-11-3 08:19
这种小功能一般来说用 shell 脚本更加合适

但是 Windows 平台 batch 很难用,PowerShell 脚本使用起来也不方便(主要是我不太会写 ps 脚本,而且平时我用的终端都是 cmd)

你好,再见 发表于 2024-11-3 14:26

system()相当于使用cmd执行命令,默认目录是当前程序的运行目录,你试试cd到conda环境的目录下再执行命令呢

狄人3 发表于 2024-11-3 23:26

linux下的话有个setenv,参考https://man7.org/linux/man-pages/man3/setenv.3.html,但是这个能不能在Windows下工作我没试过

xiao-bai-shu 发表于 2024-11-6 23:19

狄人3 发表于 2024-11-3 23:26
linux下的话有个setenv,参考https://man7.org/linux/man-pages/man3/setenv.3.html,但是这个能不能在Wind ...

但是我并不想接管 conda.exe 的工作,我只是想写一个别名脚本,其实可以直接自己编译 conda,反正是开源软件。

NetheRock 发表于 2024-11-12 01:18

能不能直接将承载conda的cmd.exe作为子进程然后重定向输出到父进程,并由父进程kd.exe来和用户交互?这样应该就不用考虑环境变量了
页: [1]
查看完整版本: C++ system() 命令 修改当前运行环境变量