2010-03-18 16 views
7

Un novato PowerShell pregunta:Equivalente a Bash alias en PowerShell

Me gustaría hacer un alias en PowerShell exactamente equivalente a este Bash alias:

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

En juguetear con él hasta ahora, He descubierto que esto es muy difícil.

alias

-PowerShell sólo funcionan con comandos de PowerShell + llamadas a funciones

-No clara manera de permitir un número ilimitado de argumentos en una llamada a la función PowerShell

-PowerShell parece bloquear la salida estándar


vale la pena señalar que he intentado la solución planteada aquí: http://huddledmasses.org/powershell-power-user-tips-bash-style-alias-command/

Y he ir tten el siguiente error relacionado con la sintaxis de la carga hasta 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 
+0

¡Ojalá pudiera darte más de un 1 por hacer esta pregunta! Muchas gracias. –

Respuesta

8

alias PowerShell se pueden utilizar para cualquier "orden" que incluye EXE:

new-alias n notepad.exe 

actualización: como se ha mencionado en los comentarios, alias PowerShell no permiten argumentos. Son simples "alias" para un nombre de comando y nada más. Para conseguir lo que está después (creo que ya que no estoy familiarizado con los alias Bash) intente esto:

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

Se utiliza una característica de PowerShell 2.0 denominado argumento splatting. Puede aplicar @ a un nombre de variable que haga referencia a una matriz o una tabla hash. En este caso, lo aplicamos a la variable llamada args que contiene todos los parámetros sin nombre.

Si desea una manera verdaderamente genérico para crear alias funciones que tienen parámetros, intente esto:

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' 

cuanto a la cuestión con el enfoque de Joel, sospecho que tiene which alias de Get-Command. Intente reemplazar which con Get-Command.

+0

Hola Kieth, El comando New-Alias ​​no parece permitir que se especifiquen argumentos para el ejecutable. (Tal vez me equivoque?) Además, no estoy preocupado por conseguir la pronta vuelta inmediatamente, sólo quiero "django-admin-jy ayuda" a comportan exactamente igual que "jython/ruta/a/jython-dev/dist/bin/django-admin.py help " (Y, por supuesto, tiene la capacidad de especificar cualquier otro argumento también.) Para no parecer flojo (He estado jugando con esto durante algún tiempo), pero creo que al ver una función completa para la simulación bash alias podría ser la más útil para todos. – RightFullRudder

+0

Kieth, Tu primera respuesta funcionó! La segunda resultó en un error (demasiado grande para pegar aquí), pero estoy contento con solo usar la primera (no mucho sintaxis extra), y le estoy otorgando la recompensa. – RightFullRudder

+0

Solucioné el problema con el segundo enfoque (tenía algún código restante de una prueba anterior). –

1

Las funciones pueden tener arbitrariamente muchos argumentos. Solo necesita usar $args para acceder a ellos.

En cuanto al problema de stdout: ¿Qué estás experimentando exactamente?

Cuestiones relacionadas