根据其他用户建议的建议创建此问题,这是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'.
现在,另一位用户告诉我,如果我要使用双"我需要逃避内部引号。我所知道的Powershell中的逃逸字符是`,所以我尝试了以下内容。
add-content "${env:homepath}\.proxy\TempProxy.bat" "alias proxyon='source `"$HOMEPATH/.proxy/proxy-switch.sh on"'"
其中给出了以下内容
字符串开头:在C:\ Chef \ windowsdevbox-master \ test.ps1:2 焦炭:113 + add-content" $ {env:homepath} .proxy \ TempProxy.bat" " alias proxyon =' source`" $ HOMEPATH / .proxy / proxy-switch.sh on" <<<< '"是 错过终结者:'。
我也试过
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"'
对此的任何建议都会受到极大关注。
答案 0 :(得分:2)
我认为问题是你想要输出文件中的文字$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"')