根据其他用户的建议创建此问题,它是 this 的后续问题。
场景是,我当前正在尝试创建一个 Powershell 脚本,首次用户可以运行该脚本,该脚本将安装一堆程序并完成一些配置更改。配置更改之一是创建一个包含两个 shell 命令的文件(如下所示),然后每次加载 GitBash 时都会执行该文件。
我尝试输入到 .sh 文件中的命令是..(删除“和”)
alias proxyon=source $HOMEPATH/.proxy/proxy-switch.sh on
alias proxyoff=source $HOMEPATH/.proxy/proxy-switch.sh off
我正在尝试使用以下命令来执行此操作
add-content "${env:homepath}\.proxy\TempProxy.bat" "alias proxyon='source "$HOMEPATH/.proxy/proxy-switch.sh on"'"
但是,执行 ps1 脚本会抛出错误,最上面一行是
Add-Content : A positional parameter cannot be found that accepts argument '/.proxy/proxy-switch.sh'.
现在,另一位用户告诉我,如果我要使用 double "我需要转义内部引号。据我所知,Powershell 中的转义字符是 ` ,所以我尝试了以下操作。
add-content "${env:homepath}\.proxy\TempProxy.bat" "alias proxyon='source `"$HOMEPATH/.proxy/proxy-switch.sh on"'"
给出了以下内容
The string starting: At C:\Chef\windowsdevbox-master\test.ps1:2 char:113 + add-content "${env:homepath}.proxy\TempProxy.bat" "alias proxyon='source `"$HOMEPATH/.proxy/proxy-switch.sh on" <<<< '" is missing the terminator: '.
我也尝试过
add-content "${env:homepath}\.proxy\TempProxy.bat" "alias proxyon='source `"$HOMEPATH/.proxy/proxy-switch.sh on`"'"
这不会出错,但是它不会添加 $HOMEPATH 的内容,只添加以下内容
alias proxyon='source "/.proxy/proxy-switch.sh on"'
对此的任何建议将不胜感激。
最佳答案
我认为问题在于您希望输出文件中包含文字 $homepath
以便让 GitBash 处理它。有很多方法可以尝试逃避和处理这个问题,但让我们与您最后一个几乎准备好的方法一起工作。
add-content "${env:homepath}\.proxy\TempProxy.bat" "alias proxyon='source `"`$HOMEPATH/.proxy/proxy-switch.sh on`"'"
这里唯一不同的是$HOMEPATH
前面的反引号。由于 PowerShell 使用 $ 来声明和引用变量,因此您需要对其进行转义,就像您对引号所做的那样,以防止 PowerShell 解释它。
由于您没有名为 $HOMEPATH
的变量,因此当时会使用 null 值创建该变量。这就是为什么上一个示例的输出看起来像这样的原因。
使用格式运算符
另一个可能更容易理解的选项是使用格式运算符。如果你想将它临时存储在一个变量中,你可以这样做。
$content = "alias proxyon='{0}'" -f 'source "$HOMEPATH/.proxy/proxy-switch.sh on"'
add-content "${env:homepath}\.proxy\TempProxy.bat" $content
或者内联它是
add-content "${env:homepath}\.proxy\TempProxy.bat" ("alias proxyon='{0}'" -f 'source "$HOMEPATH/.proxy/proxy-switch.sh on"')
关于powershell - 嵌入Powershell脚本问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29920934/