新手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
答案 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 上运行)。