我需要创建一个集成脚本来设置一些环境变量,使用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

标签:bash,linux,shell,powershell,windows

来源: https://codeday.me/bug/20190727/1554025.html

linux运行powershell,linux – 是否可以编写一个在bash / shell和PowerShell中运行的脚本?...相关推荐

  1. 在Linux环境下用C语言编写一个乘法程序mult,从命令行接收两个数字,然后输出其乘积;再用C语言编写一个exec1程序,在程序中使用execvp调用mult程序计算5与10的乘积。

    在Linux环境下用C语言编写一个乘法程序mult,从命令行接收两个数字,然后输出其乘积:再用C语言编写一个exec1程序,在程序中使用execvp调用mult程序计算5与10的乘积. 1.mult. ...

  2. 【Linux】用进程控制知识做一个简易版shell

    文章目录 什么是shell 图示 分析 代码 什么是shell shell是命令行解释器的统称 当前使用的shell的名字是bash,bash其实也是一个程序 当前我使用的是centos7下实现一个简 ...

  3. C语言——选择控制结构 寻找中位数v1.0编写一个函数返回三个整数中的中间数。函数原型:int mid(int a, int b, int c);功能是返回a,b,c三数中大小位于中间的一个数。

    寻找中位数v1.0 编写一个函数返回三个整数中的中间数. 函数原型:int mid(int a, int b, int c); 功能是返回a,b,c三数中大小位于中间的一个数. 程序运行结果示例1: ...

  4. 数据结构第5章例题 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。

    [例5.1] 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点.试编写一个算法,找出A中的所有鞍点. 算法如下: void saddl ...

  5. 请编写一个程序,请将字符串中所有字母全部向后移一位,最后一个字母放在字符串的开头,最后将新的字符串输出。

    请编写一个程序,请将字符串中所有字母全部向后移一位,最后一个字母放在字符串的开头,最后将新的字符串输出. ran = [] result = "" old_str = input( ...

  6. 请编写一个程序,用于统计字符串中每个字母的出现次数(字母忽略大小写),统计出结果后,请按照{'a':3,'b':2}的格式输出。

    请编写一个程序,用于统计字符串中每个字母的出现次数(字母忽略大小写),统计出结果后,请按照{'a':3,'b':2}的格式输出. ras = [] mystr = input("请输入一个全 ...

  7. 编写一个Java程序,在程序中包含一个Employee类,Employee类包含name、age、salary三个成员变量

    编写一个Java程序,在程序中包含一个Employee类,Employee类包含name.age.salary三个成员变量,Employee类中有4个构造方法,分别为无参的.带一个参数用来对name属 ...

  8. 假设二叉树采用二叉链存储结构,编写一个算法,求出二叉树中的叶子结点数,并设计主函数调用上述算法。

    假设二叉树采用二叉链存储结构,编写一个算法,求出二叉树中的叶子结点数,并设计主函数调用上述算法. #include<iostream>//蓝多多算法实验五:二叉树的应用(二) #inclu ...

  9. 编写一个能将给定非负整数列表中的数字排列成最大数字的函数

    编写一个能将给定非负整数列表中的数字排列成最大数字的函数.例如,给定[50,2,1,9],最大数字为95021. public class TestFindMaxNum { /** * @param ...

最新文章

  1. web前端知识点太多_初学web前端,学习方法容易走偏,这是为什么?
  2. 验证用户输入的是不是中文名字 淘宝精品案例 元素样式设置的方式 链式编程
  3. idea热部署devtools
  4. python中for循环怎么打开_详解Python中for循环的使用
  5. python能以文本和二进制方式处理文件_使用Python进行二进制文件读写的简单方法(推荐)...
  6. 实时监控 轻松玩转IT运维
  7. 【图解深度学习】【章节:1-1.2 | 神经网络输入输出】连小学生都能看懂的深度学习基础总结
  8. 自媒体爆文神器——必备爆文写作工具
  9. 华硕主板怎么刷bios
  10. 1219 厘米到英寸的转换
  11. JS-计算日期差值;计算日期之间的月数
  12. 未能打开这台计算机上的组策略对象,您可能没有合适的权限
  13. 华三imc服务器型号,华三imcportal服务器常见错误分析报告.doc
  14. 安装office2016后文档表格不能显示图标
  15. 苏宁易购不易购,遭遇临时涨价、一月未送货
  16. 云南大学研究生院c语言真题,云南大学地图学与地理信息系统研究生考试科目和考研参考书目...
  17. pom.xml详解撸一下基础
  18. Qt 在GraphicsView中 打开一幅图片
  19. websocket重连机制
  20. CCKS2020事理图谱应用工作:刘焕勇等.面向开放文本的逻辑推理知识抽取与事件影响推理探索

热门文章

  1. 哥哥对弟弟说的s9t9太空堡垒
  2. FreeEIM在树上一会儿荡秋千
  3. 为自己的p2psearcher理想而努力地奋斗
  4. 它是那么的渺小freeeim
  5. 飞鸽传书:webbrowser 本生是一个控件
  6. 不写程序,整体就泡 土豆网电视剧
  7. 一个25岁董事长给程序员的18条忠告
  8. 第三节:创建一个Vue实例,超简单
  9. remmima 不能保存_Vue项目实现表单登录页保存账号和密码到cookie功能_婳祎_前端开发者...
  10. java 读取txt文件指定行_在Java中读取txt文件中的特定行