1

我需要从当前的顶级 shell 运行脚本块/脚本,并且我希望它们保持全局范围不变。

到目前为止,我只能想到以下几种可能性:

 powershell -file <script>
 powershell -noprofile -command <scriptblock>

问题是,它们非常慢。

例如,我希望能够做到:

mkdir newdir
cd newdir
$env:NEW_VAR = 100
ni -item f 'newfile.txt'

...这样我的 shell 的工作目录就不会改变,$env:NEW_VAR也不会在全局范围内设置。

有没有更多的选择来实现这一点?

4

2 回答 2

2

我不知道还有其他选择。正如@Peter 回答的那样,每个进程都保留环境变量。

此外,如果您在其中创建新目录和文件,那么您将更改全局环境。所以这个脚本并不是完全无辜的。

在你的情况下,我会按照你的建议运行新的进程。
如果实在是太懒了,就把它放到一个脚本里面,然后包装到try/finally中:

--- script.ps1
push-location
try {
  mkdir newdir
  cd newdir
  $env:NEW_VAR = 100
  ni -item f 'newfile.txt'
} finally {
  pop-location
  # delete dir/file?
  remove-item env:NEW_VAR
}
于 2010-05-31T07:29:41.467 回答
1

没有所谓的全球环境。生成新进程时,操作系统会为新进程创建环境副本。

如果您在单独的进程中运行脚本,那么当它离开时,一切都会完好无损。

于 2010-05-30T22:30:10.973 回答