相当于PowerShell中的Bash别名

时间:2010-03-18 07:32:06

标签: django powershell

新手PowerShell问题:

我想在PowerShell中创建一个完全等同于此Bash别名的别名:

alias django-admin-jy="jython /path/to/jython-dev/dist/bin/django-admin.py"

到目前为止,我一直在修补它,我发现这很困难。

-PowerShell别名仅适用于PowerShell命令+函数调用

- 在PowerShell函数调用中允许无限数量的参数的明确方法

-PowerShell似乎阻止了stdout


值得注意的是,我已尝试过此处提出的解决方案:http://huddledmasses.org/powershell-power-user-tips-bash-style-alias-command/

在加载PowerShell时遇到以下与语法相关的错误:


The term 'which' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spell
ing of the name, or if a path was included, verify that the path is correct and try again.
At C:\Users\Dan\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1:9 char:27

+             $cmd = @(which <<<<  $_.Content)[0]
    + CategoryInfo          : ObjectNotFound: (which:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

3 个答案:

答案 0 :(得分:13)

PowerShell别名不允许使用参数 它们只能引用命令 name ,它可以是cmdlet或函数的名称,也可以是脚本或可执行文件的名称/路径。

要了解您的目标,您需要定义功能

function django-admin-jy {
    jython.exe /path/to/jython-dev/dist/bin/django-admin.py @args
}

这使用自PowerShell 2.0以来可用的功能,称为参数splatting:您可以将@应用于引用数组或哈希表的变量名。
在这种情况下,我们将它应用于名为args的{​​{3}},其中包含所有参数(未绑定到显式声明的参数 - 请参阅automatic variable) 。

如果您想要一种真正通用的方法来创建带参数的别名函数,请尝试以下方法:

function New-BashStyleAlias([string]$name, [string]$command)
{
    $sb = [scriptblock]::Create($command)
    New-Item "Function:\global:$name" -Value $sb | Out-Null
}

New-BashStyleAlias django-admin-jy 'jython.exe /path/to/jython-dev/dist/bin/django-admin.py @args'

答案 1 :(得分:1)

函数可以有任意多个参数。您只需使用$args即可访问它们。

至于stdout问题:你究竟遇到了什么?

答案 2 :(得分:1)

我为此苦苦挣扎了一段时间,我编写了这个 PowerShell 模块:

https://www.powershellgallery.com/packages/HackF5.ProfileAlias

https://github.com/hackf5/powershell-profile-alias

要开始安装它:

Install-Module HackF5.ProfileAlias
Register-ProfileAliasInProfile

然后像这样使用它:

Set-ProfileAlias dkfeed 'Enter-Docker feed_app_container' -Bash

我自己已经使用了一段时间,我发现它非常有用。

(它只在我为自己编写的 PS 7.0 上运行)。