Эквивалент псевдонима Bash в PowerShell - PullRequest
8 голосов
/ 18 марта 2010

Новый вопрос PowerShell:

Я хотел бы сделать псевдоним в PowerShell в точности эквивалентным этому псевдониму Bash:

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

В процессе работы с ним яобнаружил, что это очень сложно.

- псевдонимы PowerShell работают только с командами PowerShell + вызовами функций

- Нет четкого способа разрешить неограниченное количество аргументов при вызове функции PowerShell

-PowerShell, по-видимому, блокирует стандартный вывод


Стоит отметить, что я попробовал предложенное здесь решение: 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

Ответы [ 2 ]

13 голосов
/ 21 марта 2010

Псевдонимы PowerShell не допускают аргументов .
Они могут ссылаться только на команду name , которая может быть именем командлета или функции, либо именем / путем скрипта или исполняемого файла.

Чтобы получить то, что вы ищете, вам нужно определить функцию :

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

При этом используется функция, доступная с PowerShell 2.0, называемая аргументом , разделяющая : вы можете применить @ к имени переменной, которая ссылается либо на массив, либо на хеш-таблицу.
В этом случае мы применяем его к автоматической переменной с именем args, которая содержит все аргументы (которые не были связаны с явно объявленными параметрами - см. about_Functions ).

Если вы хотите действительно общий способ создания псевдонимов функций, которые принимают параметры, попробуйте это:

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 голос
/ 18 марта 2010

Функции могут иметь произвольное количество аргументов. Вам просто нужно использовать $args для доступа к ним.

Что касается вопроса о stdout: что именно вы испытываете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...