Эквивалентный Bash искажают в PowerShell

Новичок вопрос о 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

9
задан Peter Mortensen 23 June 2017 в 23:18
поделиться

2 ответа

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

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

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

Здесь используется функция, доступная в PowerShell 2.0, которая называется аргументом splatting : вы можете применить @ к имени переменной, которая ссылается либо на массив, либо на хеш-таблицу.
В этом случае мы применяем его к автоматической переменной с именем 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'
17
ответ дан 4 December 2019 в 11:41
поделиться

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

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

1
ответ дан 4 December 2019 в 11:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: