我有一个用于运行 NPM 的批处理脚本,简化后如下所示:
cd ./subfolder
call npm run dev
然后在 Powershell 中启动它后,NPM 服务器正在运行。当我按两次 Ctrl+C 关闭它时,我的当前目录保持原样,这很好。但是,后来我需要在脚本中执行更复杂的任务,因此我将其更改为 Powershell 脚本,简化后如下所示:
Set-Location ./subfolder
npm run dev
但是现在,当我从 Powershell 运行它并关闭时,我的工作目录留在“子文件夹”,这真的很烦人!
有人知道如何解决它,以便 Powershell 脚本的行为与批处理文件相同吗?
编辑:我注意到,事实恰恰相反,如果我从命令提示符调用批处理脚本,那么当前目录也会保存在“子文件夹中”。
EDIT2:我尝试将其放在Set-Location ..
最后。问题是,当我按 Ctrl+C 关闭 NPM(这是一个永无止境的过程)时,不仅 NPM 被关闭,而且 powershell 脚本也被关闭,因此永远不会到达最后一个命令。
答案1
作为 DavidPostill 建议的改进,您可以使用 PowerShell TRY/FINALLY 命令来正常终止脚本:
try
{
pushd ./subfolder
npm run dev
}
finally
{
write-host "Ended work."
popd
}
答案2
如何在 Powershell 脚本中恢复以前的目录?
使用pushd
/Push-Location
和popd
/ Pop-Location
:
pushd ./subfolder
npm run dev
popd
进一步阅读
- PowerShell 命令 - PowerShell - SS64.com
- PowerShell 操作指南和示例 - PowerShell - SS64.com
- Pop-Location - PowerShell - SS64.com
- 推送位置 - PowerShell - SS64.com
来源
答案3
而不是在命令/PowerShell提示符内运行脚本:
./script.ps1
您可以在新提示中运行它:
pwsh ./script.ps1
这样,脚本就不会影响您正在执行命令的提示符。