嵌入Powershell脚本问题
Embedding in the Powershell script issue
根据另一位用户的建议创建此问题,它是 的跟进。
场景是我目前正在尝试创建一个 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 处理它。有很多方法可以尝试逃避和处理这个问题,但让我们与您一起工作,您制作的最后一个 almost 就绪。
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 脚本,初次使用的用户可以 运行,它将安装一堆程序并完成一些配置更改。其中一项配置更改是创建一个包含两个 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 处理它。有很多方法可以尝试逃避和处理这个问题,但让我们与您一起工作,您制作的最后一个 almost 就绪。
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"')