2010-04-20 3 views
3

Немного предыстории:Что такое правильный способ передать параметр Set-Alias ​​в powershell?

Я использую PowerShell В Windows XP на работе, и я поставил кучу полезных ярлыков в 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 

Итак, как правильно изменить мои функции, чтобы принимать параметры, которые я отправляю в функции?

Спасибо!

ответ

8

Ваша функция не принимает никаких аргументов, поэтому неудивительно, что никто не прошел.

Вы должны написать его так:

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 
+0

Johannes - Спасибо! Я новичок в powershell - так что я не был уверен, как сдать args, он не работает так же, как bash .. Спасибо! – konung

+0

Ему нужно было бы рассмотреть Invoke-Expression или другие способы избежать аргументов, которые используют некоторые специальные символы. Такие вещи, как: или - могут начать испортить powershell, анализируя вашу полную командную строку. –

Смежные вопросы