《单步、断点、图形界面调试,鼠标选中n行右键执行,powershell极大提升了linux脚本生产力》
---linux中调试ps脚本的注意事项文章修改版,写于2019-06-20
---------【第一章 在linux中用shell脚本,有啥坏处?】---------
shell脚本单步,断点难。尤其有些是awk子语句,sed子语句,甚至还有python。
这根本就是相当于进入了另一种计算机语言。
甚至调试1个shell脚本耗费的时间精力,顶调试20个ps脚本。shell的if,awk的if,sed的if,python的if,4种if。
这就好像你脚上套了4层鞋一样,很酸爽。请看:
===========【shell脚本单步,断点难的例子】===========
sed -e 'p;s,.V,,;n;h_' \
-e s|.»|.|* \
-e .*/,f;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/* | \
sed 'N;N;N;sf\n, ,g' | \
$(AWK) 'BEGIN { files[".M] = dirs[".M] = 1 } \
{ d=$$3; if (dirstd] != 1) { print "d", d; dirs[d] = 1 } \
if ($$2 == $$4) filestd] = files[d] M H $$1; \
else { print "fM, $$3 V" $$4, $$1; } } \
END { for (d in files) print "f", df filestd] }'
===========【shell脚本单步,断点难的例子】===========
这也是为啥要用linux版powershell的原因。
---------【第二章 在linux中用powershell脚本,有啥好处?】---------
好处之一是可以用vscode调试。
这样就有了和win同等的待遇:
1 在vscode图形界面查看变量名,变量值。
2 单步。
3 断点。
4 在vscode图形界面中,鼠标选中n行脚本,右键,执行。
5 完全支持中文脚本名、参数名、变量名、函数名、的运行和调试。请看图:
---------【为啥要在linux上调试ps脚本】---------
问:啥时候用linux版vscode,单步、断点调试linux版ps脚本?
答:
当ps1脚本中,含有linux命令的时候。
当win中无法100%重现,linux环境,linux命令时,那么你就需要在linux中调试。
---------【第三章 linux中调试ps脚本的注意事项】---------
应该尽量少用linux外部命令。
或者把linux外部命令,用bash包裹起来,存放入ps变量值。
=====================
$bashcmd =
@'
echo '我是bash命令'
echo '命令中可以有单引号'
echo "命令中可以有双引号"
echo '如需解析变量,则用这种括号,注意头尾必须换行'
echo '@\"'
echo '$a'
echo '\"@'
'@
$powershell变量 = /usr/bin/bash -c $bashcmd
#需要转义,有点不好
=====================
或
$powershell变量 =
@'
echo '我是bash命令'
echo '命令中可以有单引号'
echo "命令中可以有双引号"
echo '如需解析变量,则用这种括号,注意头尾必须换行'
echo '@"'
echo '$a'
echo '"@'
'@ | /usr/bin/bash
#不需要转义,推荐
=====================
问:为啥用bash把命令包裹起来?
答:
世界上没有片100%相同的叶子,也没有100%相同的脚本解释器。sh和bash甚至解释都不同。
ps解释linux外部命令,和bash主要在【转义】,有细小差别。
为了100%兼容bash旧命令和返回的结果,就要用bash包裹。
从win到linux远程,用vscode+powershell,远程调试linux中的ps1脚本的例子。
=====================
#第一行代码。
#在下面这行代码上,下断点。
$powershell变量 =
@'
ls -l /tmp |awk '{print $9}'
'@ | /usr/bin/bash
#第n行代码。=====================
---------【第四章 在win中用vscode,远程调试linux中的ps1,的步骤】---------
1 在win上安装最新版vscode,最低为1.35.1。
2 安装vscode插件:remote-ssh,remote-ssh-explorer
3 定义ssh配置文件路径:
编辑c:\Users\你的用户名\AppData\Roaming\Code\User\settings.json
加上一行:
"remote.SSH.configFile": "d:\\vscode\\remote.txt"
4 编写ssh配置文件内容:
d:\vscode\remote.txt ,bom头+utf8格式。支持多个服务器,支持中文。Host 吃鸡ps62
User root
HostName 192.168.111.62
IdentityFile ~/.ssh/id_rsa
5 下载ssh:
去github上的/PowerShell/Win32-OpenSSH/releases
用ssh-keygen.exe,生成秘钥对。
6 使用我编写的ssh-copy-id6.ps1即可部署本机公钥,到各个linux服务器。
脚本最新版下载地址:
盘。百度点com/s/1n3ahVhYTyrGIm9n4N1SPRw
提取码:i55m
7 测试:
ssh.exe root@192.168.111.62 'date'
8 点击左下角,点【吃鸡ps62】。发现打开了一个【新ssh的子vscode窗口】。
这个窗口其实就是linux中安装的,linux版vscode。
本地vscode,把远程vscode,偷偷安装在了 ~/.vscode-server
可以在这个【新ssh的子vscode窗口】 ——》 插件里面,安装中文插件。
可以在这个【新ssh的子vscode窗口】 ——》 插件里面,安装xxx语言插件。
有了这个插件,即可代码高亮补全和调试,跟本地vscode一样。
若跟本地vscode不一样,或者调试不灵,那么就是测试版的bug。
9 在这个【新ssh的子vscode窗口】中,安装【powershell-preview】扩展。
注意:
【powershell】扩展,目前还不支持远程调试。
你需要安装【powershell-preview】扩展。
remote-ssh这是一个新功能,需要下一个稳定版本的powershell扩展才支持。
10 打开a.ps1,在某一行下断点,然后按f5。
11 点菜单---》终端---》新建终端。
即可打开【那台linux】的命令行,即bash。
12 看看左下角,就知道你连接到了哪台linux机子。
结论:
remote-ssh扩展,给powershell带来了,打开远程文件。
remote-ssh-explorer扩展,给powershell带来了,浏览远程目录,文件。
powershell-preview扩展,帮powershell带来了,远程调试。
远程调试,是最主要的功能。你还可以在linux机子上,安装c#扩展,py扩展,java扩展等。调试工具。
---linux中调试ps脚本的注意事项文章修改版,写于2019-06-20
---------【第一章 在linux中用shell脚本,有啥坏处?】---------
shell脚本单步,断点难。尤其有些是awk子语句,sed子语句,甚至还有python。
这根本就是相当于进入了另一种计算机语言。
甚至调试1个shell脚本耗费的时间精力,顶调试20个ps脚本。shell的if,awk的if,sed的if,python的if,4种if。
这就好像你脚上套了4层鞋一样,很酸爽。请看:
===========【shell脚本单步,断点难的例子】===========
sed -e 'p;s,.V,,;n;h_' \
-e s|.»|.|* \
-e .*/,f;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/* | \
sed 'N;N;N;sf\n, ,g' | \
$(AWK) 'BEGIN { files[".M] = dirs[".M] = 1 } \
{ d=$$3; if (dirstd] != 1) { print "d", d; dirs[d] = 1 } \
if ($$2 == $$4) filestd] = files[d] M H $$1; \
else { print "fM, $$3 V" $$4, $$1; } } \
END { for (d in files) print "f", df filestd] }'
===========【shell脚本单步,断点难的例子】===========
这也是为啥要用linux版powershell的原因。
---------【第二章 在linux中用powershell脚本,有啥好处?】---------
好处之一是可以用vscode调试。
这样就有了和win同等的待遇:
1 在vscode图形界面查看变量名,变量值。
2 单步。
3 断点。
4 在vscode图形界面中,鼠标选中n行脚本,右键,执行。
5 完全支持中文脚本名、参数名、变量名、函数名、的运行和调试。请看图:
---------【为啥要在linux上调试ps脚本】---------
问:啥时候用linux版vscode,单步、断点调试linux版ps脚本?
答:
当ps1脚本中,含有linux命令的时候。
当win中无法100%重现,linux环境,linux命令时,那么你就需要在linux中调试。
---------【第三章 linux中调试ps脚本的注意事项】---------
应该尽量少用linux外部命令。
或者把linux外部命令,用bash包裹起来,存放入ps变量值。
=====================
$bashcmd =
@'
echo '我是bash命令'
echo '命令中可以有单引号'
echo "命令中可以有双引号"
echo '如需解析变量,则用这种括号,注意头尾必须换行'
echo '@\"'
echo '$a'
echo '\"@'
'@
$powershell变量 = /usr/bin/bash -c $bashcmd
#需要转义,有点不好
=====================
或
$powershell变量 =
@'
echo '我是bash命令'
echo '命令中可以有单引号'
echo "命令中可以有双引号"
echo '如需解析变量,则用这种括号,注意头尾必须换行'
echo '@"'
echo '$a'
echo '"@'
'@ | /usr/bin/bash
#不需要转义,推荐
=====================
问:为啥用bash把命令包裹起来?
答:
世界上没有片100%相同的叶子,也没有100%相同的脚本解释器。sh和bash甚至解释都不同。
ps解释linux外部命令,和bash主要在【转义】,有细小差别。
为了100%兼容bash旧命令和返回的结果,就要用bash包裹。
从win到linux远程,用vscode+powershell,远程调试linux中的ps1脚本的例子。
=====================
#第一行代码。
#在下面这行代码上,下断点。
$powershell变量 =
@'
ls -l /tmp |awk '{print $9}'
'@ | /usr/bin/bash
#第n行代码。=====================
---------【第四章 在win中用vscode,远程调试linux中的ps1,的步骤】---------
1 在win上安装最新版vscode,最低为1.35.1。
2 安装vscode插件:remote-ssh,remote-ssh-explorer
3 定义ssh配置文件路径:
编辑c:\Users\你的用户名\AppData\Roaming\Code\User\settings.json
加上一行:
"remote.SSH.configFile": "d:\\vscode\\remote.txt"
4 编写ssh配置文件内容:
d:\vscode\remote.txt ,bom头+utf8格式。支持多个服务器,支持中文。Host 吃鸡ps62
User root
HostName 192.168.111.62
IdentityFile ~/.ssh/id_rsa
5 下载ssh:
去github上的/PowerShell/Win32-OpenSSH/releases
用ssh-keygen.exe,生成秘钥对。
6 使用我编写的ssh-copy-id6.ps1即可部署本机公钥,到各个linux服务器。
脚本最新版下载地址:
盘。百度点com/s/1n3ahVhYTyrGIm9n4N1SPRw
提取码:i55m
7 测试:
ssh.exe root@192.168.111.62 'date'
8 点击左下角,点【吃鸡ps62】。发现打开了一个【新ssh的子vscode窗口】。
这个窗口其实就是linux中安装的,linux版vscode。
本地vscode,把远程vscode,偷偷安装在了 ~/.vscode-server
可以在这个【新ssh的子vscode窗口】 ——》 插件里面,安装中文插件。
可以在这个【新ssh的子vscode窗口】 ——》 插件里面,安装xxx语言插件。
有了这个插件,即可代码高亮补全和调试,跟本地vscode一样。
若跟本地vscode不一样,或者调试不灵,那么就是测试版的bug。
9 在这个【新ssh的子vscode窗口】中,安装【powershell-preview】扩展。
注意:
【powershell】扩展,目前还不支持远程调试。
你需要安装【powershell-preview】扩展。
remote-ssh这是一个新功能,需要下一个稳定版本的powershell扩展才支持。
10 打开a.ps1,在某一行下断点,然后按f5。
11 点菜单---》终端---》新建终端。
即可打开【那台linux】的命令行,即bash。
12 看看左下角,就知道你连接到了哪台linux机子。
结论:
remote-ssh扩展,给powershell带来了,打开远程文件。
remote-ssh-explorer扩展,给powershell带来了,浏览远程目录,文件。
powershell-preview扩展,帮powershell带来了,远程调试。
远程调试,是最主要的功能。你还可以在linux机子上,安装c#扩展,py扩展,java扩展等。调试工具。