如何在 PowerShell 中将参数传递给类 Unix 的命令(通过 MinGW)

kum*_*rsh 2 windows powershell mingw

我在我的 Windows 机器上使用 MinGW,当我将它与 一起使用时command-prompt,事情按预期工作:

  • ls 列出可见文件
  • ls -a 列出所有文件等

但是,当我启动 Powershell 时,当我将参数传递给我的命令时,它会不断抛出错误,如下所示:

D:\>ls -al .

Get-ChildItem : A parameter cannot be found that matches parameter name 'al'.
At line:1 char:4
+ ls -al .
+    ~~~
  + CategoryInfo : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException
  + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.Powershell.Commands.GetChildItemCommand
Run Code Online (Sandbox Code Playgroud)

如何通过 Powershell 正确使用所有 MinGW/msys 命令?

Dun*_*can 5

ls是 Powershell 中get-childitem命令的别名。如果你想运行一个名为的外部命令,ls你需要强制 Powershell 忽略它自己的ls命令。

您可以尝试运行ls.exe,或指定 MinGW 命令的路径,或取消定义 Powershell 别名。或者学习使用 Powershell 自己的ls命令的选项。

最接近的 Powershell 等效项ls -alls -ForceThis will display all hidden and system files and Powershell's default output forls看起来有点像ls -l格式。

您可以使用 Powershell 来检查将运行哪个命令,该命令执行get-command类似的工作which(或gcm用作简写以减少输入:

PS C:\Users\IEUser> get-command ls.exe

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     ls.exe                                             0.0.0.0    C:\Program Files\OpenSSH\bin\ls.exe


PS C:\Users\IEUser> get-command ls

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           ls -> Get-ChildItem

PS C:\Users\IEUser> gcm ls

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           ls -> Get-ChildItem


PS C:\Users\IEUser> gcm ls.exe

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     ls.exe                                             0.0.0.0    C:\Program Files\OpenSSH\bin\ls.exe
Run Code Online (Sandbox Code Playgroud)

如果您不想学习新命令:

PS C:\Users\IEUser> set-alias which gcm
PS C:\Users\IEUser> which ls

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           ls -> Get-ChildItem
Run Code Online (Sandbox Code Playgroud)