这是一个将 bash 文件移动到主页并使用 source 命令加载它的脚本。
# update.sh
#!/bin/bash
cp -f $PWD/bash_profile ~/.bash_profile
source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
这是行不通的!它用cp -f $PWD/bash_profile ~/.bash_profile.
里面~/.bash_profile有一个新的 PS1 定义。文件已更新,但在打开新窗口之前未发生任何更改。我需要跑source ~/.bash_profile在脚本执行后...
是否可以source在 bash 脚本中运行命令?
假设我有 2 个文件A.ps1和B.ps1,在此目录结构中:
-- root
|
|-- A.ps1
|
|-- subfolder
|
|-- B.ps1
Run Code Online (Sandbox Code Playgroud)
A.ps1:
Write-Host $PSScriptRoot
Run Code Online (Sandbox Code Playgroud)
B.ps1:
. "\root\A.ps1"
Run Code Online (Sandbox Code Playgroud)
现在,考虑到这一事实:
点采购获取您指定的脚本并立即执行它,就像它位于原始脚本中的该位置一样
B.ps1,我期望结果是\root\subfolder,但它是\root,为什么?如果A.ps1是点源到 中B.ps1,那么脚本的内容不应该像直接在 中写入一样A.ps1运行吗?意思是,不应该像从 调用一样运行,从而评估为? 我什至通过包装一个函数并在点采购后调用该函数来测试这一点。仍然产生相同的结果..B.ps1$PSScriptRootB.ps1\root\subfolderA.ps1B.ps1
点采购到底是如何运作的?
帮助文档说该脚本将以“点源”模式执行,但事实并非如此。为什么?
我阅读了帮助文档全文,没有找到原因,所以才来求助。
PS> PowerShell.exe -File '.\dot-source-test.ps1'
PS> $theValue
PS> . '.\dot-source-test.ps1'
PS> $theValue
theValue
PS>
Run Code Online (Sandbox Code Playgroud)
“dot-source-test.ps1”的内容是$theValue = 'theValue'。
如果 File 的值是文件路径,则脚本在本地范围(“点源”)中运行,以便脚本创建的函数和变量在当前会话中可用。
about_PowerShell_exe - PowerShell | about_PowerShell_exe 微软文档