Новичок вопрос о 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
Псевдонимы 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'
Функции могут иметь произвольное количество аргументов. Вам просто нужно использовать $ args
для доступа к ним.
Что касается проблемы со стандартным выводом: что именно вы испытываете?