在 Linux 上使用 PowerShell 时,是否可以在 PS 脚本退出时设置 shell $PWD?
When using PowerShell on Linux, is there a way to set the shell $PWD on exit of the PS script?
当 运行 来自 bash 的 PowerShell 脚本时,有没有办法让 PowerShell 设置调用 shell up 退出的当前目录?
我尝试了以下方法(独立的,不是一次全部)
#!/usr/bin/env pwsh
# myscript.ps1
$desiredPath = "/the/path/I/Want"
& cd $desiredPath
& Set-Location $desiredPath
& zsh -c 'cd ${clonePath}'
不幸的是,最终结果总是回到之前的$PWD
。
我确定我可以 return 脚本的路径,然后将其通过管道传输到另一个命令,但我试图找出是否有一种方法可以在不必这样做的情况下完成此操作,因为我的路径上有脚本文件夹,所以我可以简单地调用 myscript.ps1 arg1 arg2
.
没有父进程的合作,子进程无法修改其父进程的环境;但如果你可以让父级合作,你可以传回一个表达式供其计算。
(我不太熟悉 PowerShell,所以我在这里放了一个简单的 Python 脚本;但您应该很容易看到如何用 PowerShell 替换它。)
cd "$(python -c 'print("/tmp/fnord")')"
或更普遍
eval $(python -c 'print("cd /tmp/fnord")')
但是在大多数情况下你真的应该避免 eval
如果可行的话,然后 真的 如果你不能避免的话确保你可以完全信任它的输出它。
不用说,子进程可以做一些更复杂的事情,只要它在执行期间将您想要传递回父进程的表达式(仅此而已)打印到标准输出即可。
您可以在调用其他脚本之前拥有一个脚本,这会暂时为 PowerShell 会话设置环境 window,而此 window 仍处于打开状态 运行喜欢运行。在 PowerShell 会话中临时设置环境变量,并更改 $PWD
变量,然后文件将调用每个脚本,并应在第一个脚本 [=] 之后保留 $PWD
16=] 并完成,脚本到 运行 之后。
当 运行 来自 bash 的 PowerShell 脚本时,有没有办法让 PowerShell 设置调用 shell up 退出的当前目录?
我尝试了以下方法(独立的,不是一次全部)
#!/usr/bin/env pwsh
# myscript.ps1
$desiredPath = "/the/path/I/Want"
& cd $desiredPath
& Set-Location $desiredPath
& zsh -c 'cd ${clonePath}'
不幸的是,最终结果总是回到之前的$PWD
。
我确定我可以 return 脚本的路径,然后将其通过管道传输到另一个命令,但我试图找出是否有一种方法可以在不必这样做的情况下完成此操作,因为我的路径上有脚本文件夹,所以我可以简单地调用 myscript.ps1 arg1 arg2
.
没有父进程的合作,子进程无法修改其父进程的环境;但如果你可以让父级合作,你可以传回一个表达式供其计算。
(我不太熟悉 PowerShell,所以我在这里放了一个简单的 Python 脚本;但您应该很容易看到如何用 PowerShell 替换它。)
cd "$(python -c 'print("/tmp/fnord")')"
或更普遍
eval $(python -c 'print("cd /tmp/fnord")')
但是在大多数情况下你真的应该避免 eval
如果可行的话,然后 真的 如果你不能避免的话确保你可以完全信任它的输出它。
不用说,子进程可以做一些更复杂的事情,只要它在执行期间将您想要传递回父进程的表达式(仅此而已)打印到标准输出即可。
您可以在调用其他脚本之前拥有一个脚本,这会暂时为 PowerShell 会话设置环境 window,而此 window 仍处于打开状态 运行喜欢运行。在 PowerShell 会话中临时设置环境变量,并更改 $PWD
变量,然后文件将调用每个脚本,并应在第一个脚本 [=] 之后保留 $PWD
16=] 并完成,脚本到 运行 之后。