2010-03-18 15 views
7

Un newbie PowerShell domanda:Equivalente a Bash alias in PowerShell

Mi piacerebbe fare un alias in PowerShell esattamente equivalente a questo Bash alias:

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

In armeggiare con esso finora, ho trovato che questo è molto difficile.

-PowerShell alias funzionano solo con PowerShell comandi + funzione chiama

modo -Non chiaro per consentire un numero illimitato di argomenti su una funzione chiamata PowerShell

-PowerShell sembra bloccare stdout


vale la pena notare che ho provato la soluzione mettere avanti qui: http://huddledmasses.org/powershell-power-user-tips-bash-style-alias-command/

e hanno andare tten il seguente errore di sintassi legati sul caricamento fino 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

Vorrei poterti dare più di un +1 per aver fatto questa domanda! Molte grazie. –

risposta

8

alias PowerShell possono essere utilizzati per qualsiasi "comando" tra cui EXE:

new-alias n notepad.exe 

Aggiornamento: come accennato nei commenti, alias PowerShell non consentono per argomenti. Sono semplici "alias" per un nome di comando e niente di più. Per ottenere ciò che si sta dopo (credo dal momento che non sono a conoscenza alias Bash) provare questo:

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

Esso utilizza una funzione di PowerShell 2.0 chiamato argomento splatting. È possibile applicare @ a un nome di variabile che fa riferimento a un array oa una tabella hash. In questo caso, lo applichiamo alla variabile denominata args che contiene tutti i parametri senza nome.

Se si desidera un modo veramente generico per creare alias funzioni che accettano parametri, provate questo:

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' 

Per quanto riguarda il problema con l'approccio di Joel, ho il sospetto che ha which alias di Get-Command. Prova a sostituire which con Get-Command.

+0

Hi Kieth, Il comando New-Alias ​​non sembra consentire la specifica degli argomenti per l'eseguibile. (Forse mi sbaglio?) Inoltre, io non sono preoccupato per ottenere il prompt indietro immediatamente, voglio solo "aiuto django-admin-JY" a comportarsi esattamente come "jython/percorso/a/Jython-dev/dist/bin/django-admin.py help " (E, naturalmente, avere la possibilità di specificare qualsiasi altro argomento.) Non sembrare pigro (ho lavorato su questo per un po 'di tempo), ma penso che vedere una funzione completa la simulazione di alias bash potrebbe essere la più utile per tutti: – RightFullRudder

+0

Kieth, La tua prima risposta ha funzionato! Il secondo ha provocato un errore (troppo grande per incollare qui), ma sono contento di usare solo il primo (non molto sintassi extra), e vi premo la taglia – RightFullRudder

+0

Ho risolto il problema con il secondo approccio (avevo qualche codice di sinistra da un tentativo precedente) –

1

Le funzioni possono avere un numero arbitrario di argomenti. Hai solo bisogno di usare $args per accedervi.

Per quanto riguarda il problema di stdout: cosa stai vivendo esattamente?

Problemi correlati