我的目标是编写一个应用程序,使您可以快速将别名分配给长目录路径并对其进行更改。我写了一个应用程序来管理它们,该应用程序位于用户的appdata目录中的文件中,但找不到从我的应用程序中运行程序的shell目录更改方法。我的目标是让它从git bash,cmd.exe和powershell运行。我想要这样的东西:
cd /c/vsts/some-long-project-name-reports
g -a reports
现在,该目录具有别名“ reports”。下次打开控制台时,我想要进入的目录是:
g reports
我正在使用dotnet core,尽管仔细研究问题似乎根本没有办法做到。使用Directory.SetCurrentDirectory(path);
或Environment.CurrentDirectory = path;
可以更改g.exe进程的工作目录,但是当它退出时,当我运行命令时,shell返回到它的工作目录。
我想出了一个git bash解决方案,我将g
应用更改为输出路径,并将其作为go
放置在路径中:
OUTPUT="$(g $1)"
cd $OUTPUT
然后,我只需要使用.
或source
在当前shell中运行脚本即可:
. go reports
批处理文件go.bat
不需要.
或source
即可工作:
for /F "tokens=*" %%i in ('g %1') do set OUTPUT=%%i
cd %OUTPUT%
我想我必须忍受键入额外的字符,但是使用powershell可以做到这一点吗?
答案 0 :(得分:1)
在PowerShell中定义包装函数(假设g.exe
输出目标路径):
function g { Set-Location (g.exe $args) }
通常,eryksun在评论中指出,可执行文件-根据定义在子进程中运行-不能更改其父进程的工作目录。
因此,唯一的解决方案是输出目标目录的路径,并让父进程更改它。