1
villivateur 2022-05-16 10:05:02 +08:00
“powershell 能用 linux 的命令”是在瞎说,最多也就几个命令如 ls 之类的与 Linux 类似而已。
powershell 与 cmd 的区别就是,它们是两个不同的命令行环境,就跟 bash 和 zsh 的区别一样,只不过它们都能跑在 Windows 上而已。 |
2
dreasky 2022-05-16 10:09:47 +08:00
建议直接用 wsl
|
3
yaoyao1128 2022-05-16 10:18:45 +08:00 via iPhone
powershell 的.net 构建的 cmdlet 的话很多别名是和 unix shell 与 cmd 兼容 但是本身的 cmdlet 更偏向自然语言
基于.net 让 ps 多了很多功能与能力 也有很多奇奇怪怪的用法 一定程度上可以说没有 powershell 的话,win server core 和当年的 iot 版本都不会出现 奇怪的用法参见 https://www.v2ex.com/t/828462 |
4
eason1874 2022-05-16 10:51:43 +08:00 2
cmd 在 windows nt 最早的 shell ,从 dos 时代过来的,比较简陋
后来新出 powershell 接替 cmd ,两者区别大概有 ie 和 edge 那么大 |
5
lithiumii 2022-05-16 10:53:30 +08:00
初始化 conda 只要跑到 conda 那个文件夹里手动运行一下 init 就可以了吧
|
6
creanme 2022-05-16 11:06:34 +08:00
“powershell 能用 linux 的命令” 只是因为 powershell 官方内置了少量的 alias ,比如 ls 是 Get-ChildItem 的 alias 。
|
7
erquren OP |
9
eason1874 2022-05-16 11:57:08 +08:00
@erquren 那肯定是 chrome 同款内核的 edge ,区别才够大。powershell 已经超越壳的功能了,有 .net 环境,我看到好些人拿它当 python 用,开本地 http server 、处理图片什么的
powershell 是可以跨平台的,不过不是跟 unix shell 通用,是巨硬开源了在各大系统的运行环境,在 Linux 上使用得先安装环境。估计主要是 Azure 用户在用跨平台环境吧,库下载排行榜上好几十个是 Az. 开头 |
10
Tumblr 2022-05-16 13:20:19 +08:00
@eason1874 #4 啊。。。无意冒犯但这个是典型的以讹传讹的传言,PowerShell 的出现本来就没有取代 cmd 的意思。当年 Jeffrey Snover 想在 Windows 上弄套 Unix 工具,但是后来发现这玩意儿行不通,然后就半路改道,单独弄了一套东西出来,就是后来的 Windows PowerShell 。
只是 PowerShell 这东西和 cmd 同在 Windows 上,并且 PowerShell 感觉更 morden ,所以微软也在倾向于把 PowerShell 做成默认,作为 cmd 的升级了,然后上就让人觉得当初 PowerShell 的出现是为了替换掉 cmd 。 其实我觉得这是个好现象,反正 CLI 的东西本来也不是给普通用户的,对于 IT Pros 来说,用一个更现代的 shell 确实比折腾 cmd 里的字符串要舒服太多太多了。 |
11
eason1874 2022-05-16 14:30:41 +08:00
@Tumblr 明白你的意思,我知道这个发展背景,我的意思是 powershell 接替 cmd 发展 Windows 的 shell ,不是指替换掉 cmd
按 Windows 的兼容习惯,cmd.exe 再过 20 年可能都还在,巨硬连 Windows 11 edge 的 ie 模式都承诺至少兼容到 2029 |
12
seeyisee 2022-05-16 14:38:55 +08:00
比如你输入 pin 然后按 tab 补齐,他俩补齐的内容不一样。powershell 补齐的更丰富。
|
13
flynaj 2022-05-16 14:40:06 +08:00 via Android
powershell 是构建在.net 上面的,功能多,直接调用.net.不过不是每个系统上都有。cmd 所有 Windows 系统上都有。
|
14
Moha 2022-05-16 14:42:55 +08:00
前几天我测试我的问题的时候,个别任务,cmd 运行成功,powershell 却失败,离谱
|
15
ladypxy 2022-05-16 14:50:08 +08:00
powershell 很强大...比所谓的 linux 命令强大的多。。。我用这玩意写过监控系统。。
|
16
gdrk 2022-05-16 15:30:23 +08:00
想知道为啥 powershell 不完全兼容 cmd 的命令啊,前段时间用了 del 命令,cmd 正常执行,powershell 一直报参数错误。
|
18
systemcall 2022-05-16 18:11:27 +08:00 via Android
@gdrk 因为本来就只是别名,不是那些命令
ls 和 dir 在 PowerShell 里是等价的,都是 Get-ChildItem 的别名 当然如果那个命令是运行了 PATH 环境变量下的程序的话,你会发现基本上是通用的,你在 Windows 下运行 bash 也可以执行那些程序。当然,参数之类的交互上会有一些区别 |
19
haah 2022-05-16 18:13:10 +08:00
名字不一样!
|
20
bytesfold 2022-05-16 18:38:11 +08:00
只知道 powershell 很牛逼
|
21
Jiajin 2022-05-16 19:28:33 +08:00
powershell 挺强的,但是 linux shell 更顺手
|
22
dcsuibian 2022-05-16 20:43:10 +08:00
@gdrk powershell 的转义字符是反引号(`),有没有可能是这个的问题?或者其它语法兼容问题?
我个人遇到的 powershell 出问题的情况有两次,一次是 maven 直接在命令行直接创建项目,一次运行 docker 命令。一直想去学一下 powershell 但没时间。 |
23
dcsuibian 2022-05-16 21:14:11 +08:00
用 conda init powershell 应该就好了。
初次接触 powershell 是在校验 iso 文件时,不想下个专门的软件 hash ,于是搜到了 Get-FileHash 命令。从此就没怎么用过 cmd 了。 1 、基本上我就当是个加强版的 cmd 。cmd 太老了,也没在更新,各种功能残缺不全。 2 、用 Linux 的写法是不正确的,因为它实际上还是 powershell 上专有的命令,只不过使用了别名罢了。 Get-Alias ls Get-Alias rm 你就能看到实际的 powershell 命令了。 3 、不过相比 cmd 而言,powershell 肯定是对 linux 惯用者更友好的。毕竟 cmd 经常会: 'ls' 不是内部或外部命令,也不是可运行的程序 或批处理文件。 cmd 中也没法使用(~)指代家目录。补全功能也弱。 4 、跨平台这个还是不要想了。Linux 和 Windows 差别还是很大的。比如目录的权限信息就不一样。 你搜 powershell 搜到的大部分还是 windows 运维资料,而命令行使用命令的不一定是 shell 自带的,比如 windows 自带 robocopy ,我在 mac 上的装了 powershell 也没法用。Linux 用户基本上不会装 powershell 。所以“跨平台”聊胜于无。 总之你就直接拿来替代掉 cmd 就对了,总比它强。遇到语法不兼容的问题,临时还可以。 > cmd > 你执行的指令 > exit 这样嘛 |
24
dcsuibian 2022-05-16 21:21:19 +08:00
powershell 的跨平台是后来才有的。现在 windows 上预装的 powershell 还是 windows 上专用的,版本应该是 5.x 。(你打开 powershell 应该能看到更新提示)而最新版本应该是 7.2.3 ,是跨平台的。建议使用最新版,至少解压速度快了一些。
可以通过输入 $PSVersionTable 查看版本信息。 为做出区分。一般前者会被称为 windows powershell 。而后者更多用 pwsh 指代。 |
25
hengxiangbianhua 2022-05-16 21:26:41 +08:00 via Android
可识别的路径不一样。cmd 只认\,powershell 可以识别 /
|
26
Buges 2022-05-16 21:43:59 +08:00 via Android
@Tumblr 舒服个毛,PowerShell 就是典型的步子迈的太大扯到蛋。看看 elvish/nushell 传统操作系统上的现代 shell 是什么样子的。PowerShell 这么一个 DotNetScript 除非运行在一个完全基于 dotnet 平台构建的操作系统才能名副其实叫 shell 。
|
27
msg7086 2022-05-17 02:38:50 +08:00
PowerShell 可以当成一个基于 dotnet/C#的交互 Shell 。
有点像 Python 的交互命令行或者 Ruby 的 IRB 。 (比如你在 IRB 里也可以 mv 'a.txt', 'b.txt' 这样操作嘛。) 不过 PowerShell 特意优化了作为 Shell 的功能,让他可以从 PATH 里直接调用应用程序,又可以用内置的 cmdlet (相当于 cmd 的内置命令)来实现原生调用 dotnet 的功能。 当然反过来说,用起来不如普通的 Shell 那么简洁,要背诵记忆的命令和参数长了很多,和已经熟知的 Linux Shell 相比,需要一定的入门学习时间。 @ladypxy 用 PowerShell 写项目基本相当于用 C#写脚本了,功能当然是 Linux 命令集不能比的。 |