linux运行powershell,linux – 是否可以编写一个在bash / shell和PowerShell中运行的脚本?...
我需要创建一个集成脚本来设置一些环境变量,使用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中运行的脚本?...相关推荐
- 在Linux环境下用C语言编写一个乘法程序mult,从命令行接收两个数字,然后输出其乘积;再用C语言编写一个exec1程序,在程序中使用execvp调用mult程序计算5与10的乘积。
在Linux环境下用C语言编写一个乘法程序mult,从命令行接收两个数字,然后输出其乘积:再用C语言编写一个exec1程序,在程序中使用execvp调用mult程序计算5与10的乘积. 1.mult. ...
- 【Linux】用进程控制知识做一个简易版shell
文章目录 什么是shell 图示 分析 代码 什么是shell shell是命令行解释器的统称 当前使用的shell的名字是bash,bash其实也是一个程序 当前我使用的是centos7下实现一个简 ...
- 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: ...
- 数据结构第5章例题 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。
[例5.1] 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点.试编写一个算法,找出A中的所有鞍点. 算法如下: void saddl ...
- 请编写一个程序,请将字符串中所有字母全部向后移一位,最后一个字母放在字符串的开头,最后将新的字符串输出。
请编写一个程序,请将字符串中所有字母全部向后移一位,最后一个字母放在字符串的开头,最后将新的字符串输出. ran = [] result = "" old_str = input( ...
- 请编写一个程序,用于统计字符串中每个字母的出现次数(字母忽略大小写),统计出结果后,请按照{'a':3,'b':2}的格式输出。
请编写一个程序,用于统计字符串中每个字母的出现次数(字母忽略大小写),统计出结果后,请按照{'a':3,'b':2}的格式输出. ras = [] mystr = input("请输入一个全 ...
- 编写一个Java程序,在程序中包含一个Employee类,Employee类包含name、age、salary三个成员变量
编写一个Java程序,在程序中包含一个Employee类,Employee类包含name.age.salary三个成员变量,Employee类中有4个构造方法,分别为无参的.带一个参数用来对name属 ...
- 假设二叉树采用二叉链存储结构,编写一个算法,求出二叉树中的叶子结点数,并设计主函数调用上述算法。
假设二叉树采用二叉链存储结构,编写一个算法,求出二叉树中的叶子结点数,并设计主函数调用上述算法. #include<iostream>//蓝多多算法实验五:二叉树的应用(二) #inclu ...
- 编写一个能将给定非负整数列表中的数字排列成最大数字的函数
编写一个能将给定非负整数列表中的数字排列成最大数字的函数.例如,给定[50,2,1,9],最大数字为95021. public class TestFindMaxNum { /** * @param ...
最新文章
- web前端知识点太多_初学web前端,学习方法容易走偏,这是为什么?
- 验证用户输入的是不是中文名字 淘宝精品案例 元素样式设置的方式 链式编程
- idea热部署devtools
- python中for循环怎么打开_详解Python中for循环的使用
- python能以文本和二进制方式处理文件_使用Python进行二进制文件读写的简单方法(推荐)...
- 实时监控 轻松玩转IT运维
- 【图解深度学习】【章节:1-1.2 | 神经网络输入输出】连小学生都能看懂的深度学习基础总结
- 自媒体爆文神器——必备爆文写作工具
- 华硕主板怎么刷bios
- 1219 厘米到英寸的转换
- JS-计算日期差值;计算日期之间的月数
- 未能打开这台计算机上的组策略对象,您可能没有合适的权限
- 华三imc服务器型号,华三imcportal服务器常见错误分析报告.doc
- 安装office2016后文档表格不能显示图标
- 苏宁易购不易购,遭遇临时涨价、一月未送货
- 云南大学研究生院c语言真题,云南大学地图学与地理信息系统研究生考试科目和考研参考书目...
- pom.xml详解撸一下基础
- Qt 在GraphicsView中 打开一幅图片
- websocket重连机制
- CCKS2020事理图谱应用工作:刘焕勇等.面向开放文本的逻辑推理知识抽取与事件影响推理探索