powershell - 嵌入Powershell脚本问题

标签 powershell scripting git-bash

根据其他用户的建议创建此问题,它是 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/

相关文章:

windows - 通过 Powershell 或 BATCH 序列化执行 symstore

powershell - 将 PowerShell 的默认输出编码更改为 UTF-8

c++ - 无法修改传递给 lua 的对象

git - 有没有办法在一个命令中使用用户名和密码从 gitlab 克隆?

bash - 在 (Git)bash 中,在 key 中设置具有特殊字符的环境变量

相当于简单 DOS 命令行的 Powershell : "copy *.ps1 *.ps1.bak/y"

powershell - 使用 PowerShell 变量作为环境变量

build - 运行并行任务

function - Google Sheets Script – 输出单元格背景颜色的函数

git - 如何使用 Git 终端登录?