如何在PowerShell中将parameter passing给类Unix命令(通过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 

我能做些什么来通过Powershell正确使用我所有的MinGW / msys命令?

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

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

最接近的等效于ls -al Powershell将是ls -Force这将显示所有隐藏和系统文件,而ls Powershell的默认输出看起来有点像ls -l格式。

你可以使用Powershell的get-command来检查哪个命令可以执行类似的工作(或者使用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 

如果你不想学习一个新的命令:

 PS C:\Users\IEUser> set-alias which gcm PS C:\Users\IEUser> which ls CommandType Name Version Source ----------- ---- ------- ------ Alias ls -> Get-ChildItem