在powershell中将参数传递给Set-Alias的正确方法是什么?

时间:2010-04-20 18:08:52

标签: powershell alias dotfiles

一点背景:

我在windows xp上使用PowerShell工作,我在Microsoft.PowerShell_profile.ps1 My Documents中设置了一堆有用的快捷方式,尝试模拟Mac环境 灵感来自Ryan Bates's shortcuts

我有类似的事情:

Set-Alias rsc Rails-Console
function Rails-Console {Invoke-Expression "ruby script/console"}

在命令提示符中,我说:

rsc #it calls the proper command

然而,这无法正常使用

Set-Alias rsg Rails-Generate
function Rails-Generate {Invoke-Expression "ruby script/generate"}

所以当我这样做时:

rsg model User

应该调用

ruby script/generate model User

所有调用都是

ruby script/generate  #Dumping  my params

那么我如何正确修改我的函数以获取我发送给函数的参数?

谢谢!

1 个答案:

答案 0 :(得分:7)

你的函数没有任何参数,因此没有任何参数通过并不是非常令人惊讶。

你应该这样写:

function Rails-Generate { ruby script/generate $args }

请注意,此处不需要Invoke-Expression。 PowerShell是 shell - 直接调用其他程序没有问题。

演示:

PS Home:\> Set-Alias foo Call-Foo
PS Home:\> function Call-Foo { args }
PS Home:\> foo bar baz
argv[0] = Somewhere\args.exe

PS Home:\> function Call-Foo { args $args }
PS Home:\> foo bar baz
argv[0] = Somewhere\args.exe
argv[1] = bar
argv[2] = baz