Как создать пользовательский псевдоним для инструментов gnuwin32 в Windows Powershell

342
prubini87

Я установил gnuwin32 и добавил его в свою среду, поэтому я запускаю linux / unix "ls" при вводе ls в командной строке. Это не проблема для Powershell, по-видимому, но я не могу создать пользовательский псевдоним с тем же именем (ls) или с другим именем (lsa / ll / ld), и я получаю следующую ошибку :

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

Теперь вот мой скрипт Powershell:

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

Есть идеи? Насчет игнорирования файлов они мне нужны. Просто чтобы убедиться, что эта команда прекрасно работает в старой доброй командной строке, у меня проблемы только в Powershell :(

0
Вы создаете бесконечный цикл. Я бы попробовал `$ Command =" ls.exe -I ntuser \. * -I NTUSER \. * ";` LotPings 7 лет назад 0
Хороший вопрос @LotPings, это может быть ответ на мой вопрос на самом деле! Я понял, что пока мне не нужен gnuwin32, но если я переустановлю его, я обязательно наберу .EXE, а не просто "ls" или "grep" или любую другую команду !! Спасибо хипсс prubini87 7 лет назад 0

1 ответ на вопрос

0
prubini87

@LotPings Вы были правы! Добавление ".exe" в ls сделало "трюк". Я добавил цикл для получения возможных аргументов, которые я могу передать ему, и поместил аргументы в переменную $ Command. Я не уверен, что сделал это наилучшим образом, но это работает! Хехе. Еще раз спасибо!

# 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\.*"; }