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

kon*_*ung 4 powershell alias dotfiles

一点背景:

我使用PowerShell在Windows XP上的工作,我设置了一堆有用的快捷键Microsoft.PowerShell_profile.ps1中My Documents,试图效仿苹果的启发环境瑞恩·贝茨的快捷键

我有类似的东西:

Set-Alias rsc Rails-Console
function Rails-Console {Invoke-Expression "ruby script/console"}
Run Code Online (Sandbox Code Playgroud)

在命令提示符下,我说:

rsc #it calls the proper command
Run Code Online (Sandbox Code Playgroud)

但是这不能正常工作

Set-Alias rsg Rails-Generate
function Rails-Generate {Invoke-Expression "ruby script/generate"}
Run Code Online (Sandbox Code Playgroud)

所以当我这样做时:

rsg model User
Run Code Online (Sandbox Code Playgroud)

应该叫

ruby script/generate model User
Run Code Online (Sandbox Code Playgroud)

所有它都是

ruby script/generate  #Dumping  my params
Run Code Online (Sandbox Code Playgroud)

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

谢谢!!

Joe*_*oey 8

你的函数没有任何参数,因此没有任何参数通过也就不足为奇了.

你应该像这样写:

function Rails-Generate { ruby script/generate $args }
Run Code Online (Sandbox Code Playgroud)

注意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
Run Code Online (Sandbox Code Playgroud)