Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos windows和OS X实现之间PowerShell别名“ls”和“dir”的不同行为是否有原因_Macos_Powershell_Powershell Core - Fatal编程技术网

Macos windows和OS X实现之间PowerShell别名“ls”和“dir”的不同行为是否有原因

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,即使别名应优先于外部命令。验证别名是否已实际定义

有人知道下面两种情况之间输出差异的原因吗

alias ls的输出与OSX上alias dir的输出不同。在PowerShell帮助获取内容的示例中-示例:

按照示例工作。但是,如果用ls替换dir:

返回一个错误:

ls:./*.txt:没有这样的文件或目录

上述两种情况在Windows 10上的PowerShell v5中给出了相同的结果


这是一个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