PowerShell 这种强大的命令行工具,为什么使用的人很少?

2022-08-30 22:15:53 +08:00
 pepi

感觉很少是自身圈子原因。 我个人特别系统使用 WindowsTerminal 中启动 PowerShell ,git 高亮提示使用 starship 但是 powershell 中的很多设定让人吐槽 例如:curl 是个别名,正常使用 curl 这个工具的参数会报错,此时只能灰溜溜的开启 dos 去请求数据。 还有重定向编码为 UTF16 ,设计 UTF8 颇为复杂,为此逛了 StackOverflow 不少帖子

13698 次点击
所在节点    程序员
137 条回复
makelove
2022-08-30 23:21:31 +08:00
powershell 这种东西一看风格就是太微软了,笨重油腻全都要的感觉。你要说比 bash 强大么是的,但命令行设计方便使用是首位,至于强大脚本功能复杂了谁还用 shell 脚本语言写
Bingchunmoli
2022-08-30 23:23:13 +08:00
很强但学习成本高
xyjincan
2022-08-30 23:36:57 +08:00
丑拒
dingwen07
2022-08-30 23:46:25 +08:00
作为 shell 太麻烦
scripting ?那我为什么不用 python
Helsing
2022-08-30 23:54:21 +08:00
因为难用,会用命令行的用 bash 不香吗,干嘛要用 PowerShell ,而且它的反斜杆和 bash 是反的,看着难受,用着也难受。敲命令反斜杆老是敲错,然后看着爆错信息改,难用的一批。
sutra
2022-08-30 23:55:09 +08:00
@wdhwg001 真相了,太形象了吧也。
cnbatch
2022-08-30 23:57:03 +08:00
小提示,在 PowerShell 7.x ,curl 和 wget 已经不再是 Invoke-WebRequest 的别名了。
ColorfulBoar
2022-08-31 00:02:12 +08:00
有人喷了 10 年命令长都不愿意花 3 秒(其中 67.8%的时间用于启动 PowerShell )输入一次 ls 试试(与此同时跟它说 git 设计得蠢就嘲笑你连 alias 都不会设置)
有人喷了 10 年 Windows 文件名不区分大小写,却坚信 PowerShell 命令是大小写敏感的
所以你觉得这玩意用的人少跟技术有 1%的关系?
873792861
2022-08-31 00:07:32 +08:00
在 windows 写 powershell 脚本很多时候要引用.net 的东西才能完成功能,比如截屏,所以稍微复杂的东西还是使用 python 比较方便,毕竟有很多便利的库。
wxf666
2022-08-31 00:15:17 +08:00
@ColorfulBoar 你能给出一些交互式下,大家常用的,powershell 明显比 bash 短的例子吗?
dcsuibian
2022-08-31 00:18:46 +08:00
因为用 Linux 不得不学 shell ,而用 Win 用图形化界面直接上手
所以熟悉命令行的,熟悉的是 Linux 的 shell ,而不是 Windows 的 shell
dcsuibian
2022-08-31 00:20:08 +08:00
shell 和操作系统高度绑定
在 win 下直接用 linux 的做法经常会很难受的,劝你还是老老实实学两套
ronman
2022-08-31 00:25:03 +08:00
@xyjincan 虽然但是 shell 和 terminal 是两种东西吧
ysc3839
2022-08-31 01:05:34 +08:00
我自己选择 MSYS2+zsh ,主要是不想学两套东西,以及 Unix shell 的各种命令普遍较短,好记。
statumer
2022-08-31 01:21:51 +08:00
@ColorfulBoar
创建个符号链接应该怎么做来着,New-Item -Type SymbolicLink -Path \a\b\c\d -Target \e\f\g\h ,在 bash 里只需要 ln -s foo bar, 怎么回事呢?
想 grep 过滤下输出该怎么做来着, | Out-String -stream | Select-String -Pattern "foo"
更别提 Windows 到现在还没有个能用的包管理器,win-get 和 apt 比起来是个残废,让社区很难贡献命令行工具所以生态极烂
有没有一种可能是 Powershell 真的很难用,而不是因为大伙都是低水平程序员迫害你的 ps 哥哥呢?
PrinceofInj
2022-08-31 02:26:51 +08:00
@statumer bash 里面打的字比实际上 PS 里面打的字少不了多少。PS 按 tab 都补全了,如果在 vscode 里面用的话需要打的字更少。可能就比 bash 多四五个字母。bash 等学习成本太高,经常遇到不太熟悉的就得查一下应该怎么做。ln 是啥意思? ls 是啥意思?为啥有些系统还能打个 ll 出来? du 是啥意思?为啥 dd 又完全跟 du 不是一码事儿呢?那 df 跟他俩又有啥关系?
wxf666
2022-08-31 03:12:05 +08:00
@PrinceofInj 是这样吗?(我用 35 楼的试试)

1. 软链接

- `new-it<tab> -t<tab> s<tab> -t<tab> foo -p<tab> bar`(按 30 次)
- `ln -s foo bar`( 13 )

2. 过滤

- `| out-s<tab> -<tab> | sel<tab>-s<tab> -<tab> foo`( 28 )
- `| grep foo`( 10 )
geelaw
2022-08-31 03:54:53 +08:00
@statumer
@wxf666
#35 #37

New-Item -Type SymbolicLink -Path foo -Target bar
的可能缩写是
ni -ty s foo -ta bar

我不太确定为什么你想要把对象转换为字符串再过滤,这样会丧失很多数据。

过滤字符串可以缩写为

|sls foo

当然你也可以用 grep 和 find ,都是 Select-String 的意思。

过滤对象可以缩写为

|? 条件

你也可以用 where 。

当然,好的品位是不去比较这种天花乱坠的写法。另外 grep (可执行文件)和 ln (可执行文件)都不是 shell/bash 的一部分。
wanacry
2022-08-31 04:01:24 +08:00
名字很强大
wxf666
2022-08-31 04:12:24 +08:00
@geelaw 我不熟悉 powershell ,只是印象中命令都很长

所以直接拿 35 楼的命令,在 powershell 一点点试哪里可以 <tab>

如果都像你说的这么简短,倒真的可以试着学学


> 好的品位是不去比较这种天花乱坠的写法

我认为 交互式 shell 应该怎么简洁快速怎么来。脚本才重视可读性


> 另外 grep (可执行文件)和 ln (可执行文件)都不是 shell/bash 的一部分

这应该是 Linux 的哲学,一个 shell 就该当好用户与系统交互、胶水语言的角色,不是由它实现所有功能

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/876580

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX