Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Linux上使用PowerShell时,是否有办法在PS脚本退出时设置shell$PWD?_Linux_Bash_Powershell_Terminal_Zsh - Fatal编程技术网

在Linux上使用PowerShell时,是否有办法在PS脚本退出时设置shell$PWD?

在Linux上使用PowerShell时,是否有办法在PS脚本退出时设置shell$PWD?,linux,bash,powershell,terminal,zsh,Linux,Bash,Powershell,Terminal,Zsh,从bash运行PowerShell脚本时,是否有方法让PowerShell设置调用shell up出口的当前目录 我已经尝试过以下几件事(独立地,而不是一下子) 不幸的是,最终结果总是回到先前的$PWD 我确信我可以从脚本返回路径,然后通过管道将其传递到另一个命令,但我正在尝试找出是否有一种方法可以在不必这样做的情况下实现这一点,由于我的路径上有脚本文件夹,因此我可以简单地调用myscript.ps1 arg1 arg2,子流程没有父进程的合作,无法修改其父进程的环境;但是,如果可以让父对象配合

从bash运行PowerShell脚本时,是否有方法让PowerShell设置调用shell up出口的当前目录

我已经尝试过以下几件事(独立地,而不是一下子)

不幸的是,最终结果总是回到先前的
$PWD


我确信我可以从脚本返回路径,然后通过管道将其传递到另一个命令,但我正在尝试找出是否有一种方法可以在不必这样做的情况下实现这一点,由于我的路径上有脚本文件夹,因此我可以简单地调用
myscript.ps1 arg1 arg2

,子流程没有父进程的合作,无法修改其父进程的环境;但是,如果可以让父对象配合,就可以传回一个表达式,让它进行计算

(我对PowerShell不是很熟悉,所以我在这里放了一个简单的Python脚本;但是您应该很容易看到如何用PowerShell替换它。)

cd“$(python-c'打印(“/tmp/fnord”)”
或者更一般地说

eval$(python-c'print(“cd/tmp/fnord”))
但在大多数情况下,如果可行的话,你真的应该避免
eval
,如果你无法避免它,那么你应该确保你可以完全信任它的输出


不用说,子流程可以做更复杂的事情,只要它在执行过程中将您想要传递回父流程(而不是其他)的表达式打印为标准输出。

子流程没有父流程的合作,无法修改其父流程的环境;但是,如果可以让父对象配合,就可以传回一个表达式,让它进行计算

(我对PowerShell不是很熟悉,所以我在这里放了一个简单的Python脚本;但是您应该很容易看到如何用PowerShell替换它。)

cd“$(python-c'打印(“/tmp/fnord”)”
或者更一般地说

eval$(python-c'print(“cd/tmp/fnord”))
但在大多数情况下,如果可行的话,你真的应该避免
eval
,如果你无法避免它,那么你应该确保你可以完全信任它的输出


不用说,子流程可以做更复杂的事情,只要它在执行过程中将要传递回父级(而不是其他)的表达式打印为标准输出。

在调用其他脚本之前,您可以有一个脚本,这将在PowerShell会话窗口仍处于打开状态并运行要运行的脚本时临时设置该窗口的环境。在PowerShell会话中临时设置环境变量,并更改
$PWD
变量,然后文件将调用每个脚本,并在第一个脚本运行并完成后保留
$PWD
,以及要运行的脚本。

在调用其他脚本之前,您可以拥有一个脚本,该脚本在PowerShell会话窗口仍处于打开状态时临时为该窗口设置环境,以运行您要运行的脚本。如果要在PowerShell会话中临时设置环境变量,并更改
$PWD
变量,然后文件将调用每个脚本,并应在第一个脚本运行并完成后保留
$PWD
,然后再运行脚本。

这是不可能的。ps1脚本在其自己的进程中运行,这不会影响其父进程的环境变量。这是不可能的。ps1脚本在其自己的进程中运行,这不会影响其父进程的环境变量。我感谢您的回复。它让我想到用一个内联函数生成一个别名,该函数将别名保存在一个命令和一个参数中,但使我能够在最后获取脚本输出并对其应用
cd
<代码>别名克隆='f(){cd$(clone.ps1$1)};f'如果这是一个shell函数,您希望在
cd
的参数周围提供双引号;另请参阅,我认为没有任何合理的理由将函数包装为别名;只需调用函数
clone
,即可完成操作。进一步看,我完全明白你的观点。我遇到过别人做过的事情,试过,看到它奏效了,然后就没怎么想了。我现在当然明白这有点不必要了。我感谢你的答复。它让我想到用一个内联函数生成一个别名,该函数将别名保存在一个命令和一个参数中,但使我能够在最后获取脚本输出并对其应用
cd
<代码>别名克隆='f(){cd$(clone.ps1$1)};f'如果这是一个shell函数,您希望在
cd
的参数周围提供双引号;另请参阅,我认为没有任何合理的理由将函数包装为别名;只需调用函数
clone
,即可完成操作。进一步看,我完全明白你的观点。我遇到过别人做过的事情,试过,看到它奏效了,然后就没怎么想了。我现在可以肯定地看出这有点不必要。
#!/usr/bin/env pwsh 
# myscript.ps1

$desiredPath = "/the/path/I/Want"
& cd $desiredPath
& Set-Location $desiredPath
& zsh -c 'cd ${clonePath}'