So erstellen Sie einen benutzerdefinierten Alias ​​für gnuwin32-Tools in Windows Powershell

406
prubini87

Ich habe gnuwin32 installiert und an meine Umgebung angehängt, so dass ich linux / unix "ls" ausführe, wenn ich ls in die Eingabeaufforderung eingebe. Anscheinend ist das kein Problem für Powershell, aber ich kann keinen benutzerdefinierten Alias ​​mit demselben Namen (ls) oder einem anderen Namen (lsa / ll / ld) erstellen und erhalte folgende Fehlermeldung :

The script failed due to call depth overflow. + CategoryInfo : InvalidOperation: (0:Int32) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : CallDepthOverflow 

Hier ist mein Powershell-Skript:

Set-Alias -name ls -value ListDirectory -Option AllScope  Function ListDirectory {  $Command = "ls -I ntuser\.* -I NTUSER\.*"; Invoke-Expression $Command } 

Irgendwelche Ideen? Über die Ignorierdateien brauche ich sie. Um sicherzugehen, dass dieser Befehl gut in der alten Eingabeaufforderung funktioniert, habe ich nur Probleme in Powershell :(

0
Sie erstellen eine Infinitivschleife. Ich würde versuchen `$ Command =" ls.exe -I ntuser \. * -I NTUSER \. * ";` LotPings vor 7 Jahren 0
Guter Punkt @LotPings, das könnte die Antwort auf meine Frage sein !! Mir wurde klar, dass ich gnuwin32 im Moment nicht brauchte, aber wenn ich es neu installiere, werde ich sicherstellen, dass .EXE eingegeben wird und nicht nur "ls" oder "grep" oder ein anderer Befehl !! Danke, hipss prubini87 vor 7 Jahren 0

1 Antwort auf die Frage

0
prubini87

@LotPings Du hattest recht! Hinzufügen von ".exe" zu ls tat "den Trick". Ich habe eine Schleife hinzugefügt, um eventuelle Argumente zu übernehmen, die ich vielleicht übergeben möchte, und die Argumente in meine $ Command-Variable eingefügt. Ich bin nicht sicher, ob ich das am besten gemacht habe, aber es funktioniert! Hehe. Danke noch einmal!

# gnuwin32 "ls" Set-Alias -name ls -value ListDirectory -Option AllScope  Function ListDirectory { $allArgs = ""; For ($i=0; $i -lt $args.Length; $i++) { $allArgs += $args[$i] + " "; }  $Command = "ls.exe $allArgs -I ntuser\.* -I NTUSER\.*"; }