Powershell: в чем разница между псевдонимом и функцией? - PullRequest
2 голосов
/ 06 августа 2020

Я настраиваю свой профиль PowerShell для создания псевдонимов часто используемых команд. В документации Microsoft сказано, что если я хочу создать псевдоним для команды с параметрами, я должен сделать значение псевдонима функцией, которая это делает. введите описание изображения здесь . Однако, когда я набираю имя функции в командной строке, оно работает так же хорошо, как и псевдоним.

Другими словами, на картинке выше, если я наберу CD32, он будет вести себя так же, как если я наберу Go в командной строке

Итак, мой вопрос: почему я использую псевдонимы, указывающие на функции, когда у меня может быть просто функция? Есть ли между ними различия в функциях?

1 Ответ

2 голосов
/ 07 августа 2020
  • псевдоним в PowerShell позволяет вам определить альтернативное имя для другой команды d.

    • В отличие от POSIX-совместимых оболочек, таких как bash, , вы не можете включать сквозные аргументы в свое определение - вам нужна функция для этого .

    • Типичный вариант использования - определение короткого альтернативного имени для удобства интерактивного вызова ; например, PowerShell имеет встроенный псевдоним gc для своего командлета Get-Content. PowerShell даже рекомендует соглашение об именах для псевдонимов на основе официальных префиксов коротких псевдонимов для своих утвержденных глаголов , таких как g для глагола Get в данном примере.

    • Другая, проблема c - определение псевдонимов, названных для различных команд оболочки; например, PowerShell имеет встроенный псевдоним dir для своего Get-ChildItem, названный в честь внутренней команды dir (командной строки) cmd.exe. Хотя это может быть в некоторой степени полезно при переходе с cmd.exe, оно работает только при очень простых вызовах и быстро становится проблемным c из-за принципиально другого синтаксиса командной строки PowerShell и разных имен параметров.

    • Другое, беспроблемное c использование - определение псевдонима для внешнего исполняемого файла, каталог которого не указан в пути ($env:PATH); например, если вы хотите выполнить c:\path\to\foo.exe как просто foo без добавления c:\path\to к $env:PATH, вы можете использовать Set-Alias foo c:\path\to\foo.exe.

    • В отличие от POSIX- совместимые оболочки, такие как bash, псевдонимы , (неизменно) могут использоваться в скриптах (*.ps1 файлах), но их использование в скриптах не рекомендуется в интерес надежности и долгосрочной стабильности.

  • A функция , как и следовало ожидать, является именованный блок кода, который может принимать аргументы и выполнять произвольные операции .

    • Функция - это то, что вам нужно использовать, если вы хотите обернуть существующие команды , путем жесткой кодировки аргументов передачи и / или предоставления настраиваемого logi c вокруг вызова обернутой команды - см. этот ответ .
...