Macos windows和OS X实现之间PowerShell别名“ls”和“dir”的不同行为是否有原因
有人知道下面两种情况之间输出差异的原因吗 alias ls的输出与OSX上alias dir的输出不同。在PowerShell帮助获取内容的示例中-示例: 按照示例工作。但是,如果用ls替换dir: 返回一个错误: ls:./*.txt:没有这样的文件或目录 上述两种情况在Windows 10上的PowerShell v5中给出了相同的结果Macos windows和OS X实现之间PowerShell别名“ls”和“dir”的不同行为是否有原因,macos,powershell,powershell-core,Macos,Powershell,Powershell Core,有人知道下面两种情况之间输出差异的原因吗 alias ls的输出与OSX上alias dir的输出不同。在PowerShell帮助获取内容的示例中-示例: 按照示例工作。但是,如果用ls替换dir: 返回一个错误: ls:./*.txt:没有这样的文件或目录 上述两种情况在Windows 10上的PowerShell v5中给出了相同的结果 这是一个bug吗?您似乎在调用命令/bin/ls/usr/bin/ls?而不是PowerShell别名ls,即使别名应优先于外部命令。验证别名是否已实际定义
这是一个bug吗?您似乎在调用命令/bin/ls/usr/bin/ls?而不是PowerShell别名ls,即使别名应优先于外部命令。验证别名是否已实际定义:
Get-Alias -Name ls
您似乎正在调用命令/bin/ls/usr/bin/ls?而不是PowerShell别名ls,即使别名应优先于外部命令。验证别名是否已实际定义:
Get-Alias -Name ls
在以标准Unix实用程序命名的仅Windows版本中,有意将内置别名排除在跨平台版本之外,以免阴影覆盖它们
注意:对于PowerShell Core v6.0.0-alpha.10,这一点是正确的,但此设计决策引起了争议-请查看讨论。
一个值得注意的缺陷是,PowerShell在调用外部实用程序时不执行全局绑定,因此像ls*.txt这样的东西不能像在Bash中那样工作
因此,内置于Windows本机版中的alias ls并没有内置于Linux和macOS版中,因为标准的utility/bin/ls应该优先于Linux和macOS版
相比之下,dir(由于与任何标准Unix实用程序名称都不冲突)在所有版本中都是内置别名,并与Windows上的一样引用Get ChildItem
当PowerShell仅适用于Windows时,为Get-ChildItem添加ls和为Get-Content添加cat这样的别名对来自Unix背景的人来说是一种认可。
在Windows上,这些命令名没有预定义的含义,但在类似Unix的系统上,它们会隐藏标准实用程序CLI,从而导致潜在的意外行为
安全、便携的方法是坚持:
使用完整的cmdlet名称而不是别名。
和/或仅基于cmdlet名称而不是传统命令名(如ls或dir)使用别名。
PowerShell具有从cmdlet名称派生的别名的命名约定,将每个核准的动词(如Get和Copy)映射到核准的别名前缀(如g和cp)-请参阅
如果对给定命令名所指的内容有疑问,请使用Get命令或gcm。为标准Unix实用程序命名的Windows only版本中的内置别名被有意地排除在跨平台版本之外,以免阴影覆盖它们
注意:对于PowerShell Core v6.0.0-alpha.10,这一点是正确的,但此设计决策引起了争议-请查看讨论。
一个值得注意的缺陷是,PowerShell在调用外部实用程序时不执行全局绑定,因此像ls*.txt这样的东西不能像在Bash中那样工作
因此,内置于Windows本机版中的alias ls并没有内置于Linux和macOS版中,因为标准的utility/bin/ls应该优先于Linux和macOS版
相比之下,dir(由于与任何标准Unix实用程序名称都不冲突)在所有版本中都是内置别名,并与Windows上的一样引用Get ChildItem
当PowerShell仅适用于Windows时,为Get-ChildItem添加ls和为Get-Content添加cat这样的别名对来自Unix背景的人来说是一种认可。
在Windows上,这些命令名没有预定义的含义,但在类似Unix的系统上,它们会隐藏标准实用程序CLI,从而导致潜在的意外行为
安全、便携的方法是坚持:
使用完整的cmdlet名称而不是别名。
和/或仅基于cmdlet名称而不是传统命令名(如ls或dir)使用别名。
PowerShell具有从cmdlet名称派生的别名的命名约定,将每个核准的动词(如Get和Copy)映射到核准的别名前缀(如g和cp)-请参阅
如果对给定命令名所指内容有疑问,请使用Get命令或gcm
Get-Alias -Name ls