任务:创建一个集成脚本来设置一些环境变量, 使用 wget 下载文件并运行它.

挑战在于它需要是可以在 Windows PowerShell 和 bash / shell 上运行的 SAME 脚本.

这是 shell 脚本:

#!/bin/bash
# download a script
wget http://www.example.org/my.script -O my.script
# set a couple of environment variables
export script_source=http://www.example.org
export some_value=floob
# Now execute the downloaded script
bash ./my.script

这与 PowerShell 中的情况相同:

wget http://www.example.org/my.script -O my.script.ps1
$env:script_source="http://www.example.org"
$env:some_value="floob"
PowerShell -file ./my.script.ps1

所以我想知道这两个脚本是否可以合并并在任一平台上成功运行?

我一直在试图找到一种方法将它们放在同一个脚本中, 并让 bash 和 PowerShell.exe 忽略错误, 但没有成功.

我不知道这是多么兼容, 但 PowerShell 将字符串视为文本并最终显示在屏幕上, Bash 将它们视为命令并尝试运行它们, 并且两者都支持相同的函数定义语法. 因此, 将函数名称放在引号中, 只有 Bash 会运行它, 将 “exit” 放在引号中, 只有 Bash 才会退出. 然后编写 PowerShell 代码.

NB. 这是有效的, 因为两个 shell 中的语法重叠, 并且您的脚本很简单 – 运行命令并处理变量. 如果您尝试使用更高级的脚本 (if / then,for,switch,case 等) 用于任何一种语言, 另一种可能会抱怨.

将其保存为 dual.ps1, 以便 PowerShell 对它感到满意, chmod x dual.ps1 因此 Bash 将运行它

#!/bin/bash
function dobashThings {
    wget http://www.example.org/my.script -O my.script
    # set a couple of environment variables
    export script_source=http://www.example.org
    export some_value=floob
    # Now execute the downloaded script
    bash ./my.script
"dobashThings"  # This runs the bash script,in PS it's just a string
"exit"          # This quits the bash version,in PS it's just a string
# PowerShell code here
# --------------------
Invoke-WebRequest "http://www.example.org/my.script.ps1" -Outfile my.script.ps1
$env:script_source="http://www.example.org"
$env:some_value="floob"
PowerShell -file ./my.script.ps1
./dual.ps1

在任何一个系统上编辑:您可以通过使用不同的前缀注释代码块来包含更复杂的代码, 然后让每种语言过滤掉自己的代码并对其进行评估 (通常的安全警告适用于 eval), 例如:采用这种方法 (纳入 Harry Johnston 的建议):

#!/bin/bash
#posh $num = 200
#posh if (150 -lt $num) {
#posh   write-host "PowerShell here"
#posh }
#bash thing="xyz"
#bash if [ "$thing" = "xyz" ]
#bash then
#bash echo "Bash here"
#bash fi
function RunBashStuff {
    eval "$(grep '^#bash' $0 | sed -e 's/^#bash //')"
"RunBashStuff"
"exit"
((Get-Content $MyInvocation.MyCommand.source) -match '^#posh' -replace '^#posh ') -join "`n" | Invoke-Expression
                    任务:创建一个集成脚本来设置一些环境变量, 使用 wget 下载文件并运行它.挑战在于它需要是可以在 Windows PowerShell 和 bash / shell 上运行的 SAME 脚本.
				
运行可执行文件一样,Powershell运行文件和脚本,也必须使用绝对路径或者相对路径,或者要运行的文件必须定义在可受信任的环境变量中。 脚本脚本和批处理都属于伪可执行文件,它们只是包含了若干命令行解释器能够解释和执行的命令行代码。 执行批处理文件:批处理是扩展名为”.bat”的文本文件,它可以包含任何cmd控制台能够处理的命令。当批处理文件被打开,Cmd控制台会逐行执行每条命令。 在P...
PowerShell运行在windows平台的脚本,而Bash运行linux平台的脚本 现在bash能做的事情,PowerShell也能做,PowerShell的强大之处是它可以管理windows服务器(特别是域domain),现在的开源PowerShell 也可以管理Linux和Mac(通过PSRP)。 下载最新的PS程序 https://msdn.microsoft.com/en-...
在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DNS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。 Shell一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通...
这就是我们常用的 Bat 脚本,全名为批处理文件,脚本中就是我们在 CMD 中使用到的命令,这里提一个小问题:CMD 的命令行执行命令的优先级是.bat > .exe,那么假如我放一个 cmd.bat 在 system32 目录下,那么优先执行的是 cmd.bat,这里面的内容就变得不可描述起来了 VBscript 执行 vbs 就是常说的 vbscript,是微软为了方便自动化管理 win.
Windows 下直接用 cmd 命令行效果不佳,熟悉了 Linux 环境,使用 PowerShell 较为方便,但是 Power’Shell 默认以 Restricted 执行策略启动,Restricted 执行策略不允许执行任何脚本。 要在 PowerShell 下执行脚本,需要以管理员方式启动 PowerShell, 并使用 set-executionpolicy remotesigned 命令修改执行策略。这样就可以在 PowerShell 中执行脚本了。 powershell和cmd 在windows上cmd和powershell都是命令行执行窗口,Powershell 从 Windows7 时代开始内置于 Windows 系统当中,可以看作是微软对 cmd 的大升级,目前两者并存于 Windows 系统中。 1、powershell功能更加强大可以说分分钟钟秒杀linuxbash,更别说饱受诟病的 cmd; 2、powershell 背后依靠的是一套完整的 .NET 编程体系,其脚本更容易编写且稳健性大大提升。
Powershell 编写运行脚本 一个Powershell仅仅是一个包含Powershell代码的文本文件。如果这个文本文件执行,Powershell解释器会逐行解释并执行它的的语句。Powershell脚本非常像以前CMD控制台上的批处理文件。您可以通过非常简单的文本编辑工具创建Powershell脚本。 通过重定向创建脚本 如果您的脚本不是很长,您甚至可以直接在控制台中要执行的语句重...
        当从win10的cmd命令行,PowerShell,或者Ubuntu子系统访问SSH服务器或者SSH Git Server,可以使用证书登录。但是默认情况下,需要每次都输入证书密码(passphrase),很不方便。         使用Visual Studio Code的终端,可以设置为使用以上三种Shell之一【可参考 设置Visual Studio Code的默认SHEL...
可以使用任何文本编辑器来编写shell脚本,如vi、nano或gedit。 下面是一个简单的shell脚本示例,它在执行时会输出 "Hello, world!": #!/bin/bash echo "Hello, world!" 首先,“#!/bin/bash”是脚本的第一行,用于指示脚本使用bash shell运行。 其次,“echo”命令用于向屏幕输出文本。 要执行这个脚本,可以在终端中使用“. /脚本名称”或“bash /脚本名称”命令来运行它。 需要注意的是,在第一行#! 后面的路径是根据系统不同而不同,在linux上为/bin/bash,mac为/bin/zsh,需要根据你的系统来选择对应的路径 脚本文件保存为.sh后缀,并赋予可执行权限。