Как я могу написать псевдоним PowerShell с аргументами в середине?
Я пытаюсь настроить псевдоним Windows PowerShell для запуска исполняемого файла MinGW g++ с определенными параметрами. Однако эти параметры должны появиться после имени файла и других аргументов. Я не хочу испытывать трудности при попытке настроить функцию и все такое. Есть ли способ просто сказать что-то вроде:
alias mybuild="g++ {args} -lib1 -lib2 ..."
или что-то в этом роде? Мне не все знакомы с PowerShell, и мне сложно найти решение. Кто-нибудь?
Ответы
Ответ 1
Вы хотите использовать функцию, а не псевдоним, как упоминал Роман. Что-то вроде этого:
function mybuild { g++ $args -lib1 -lib2 ... }
Чтобы попробовать это, вот простой пример:
PS> function docmd { cmd /c $args there }
PS> docmd echo hello
hello there
PS>
Вы также можете поместить это в свой профиль, чтобы он был доступен при запуске PowerShell. Имя вашего файла профиля содержится в $profile
.
Ответ 2
Существует не такой встроенный способ. IMHO, функция обертки - лучший способ зайти так далеко. Но я знаю, что были изобретены некоторые обходные пути, например:
https://web.archive.org/web/20120213013609/http://huddledmasses.org/powershell-power-user-tips-bash-style-alias-command
Ответ 3
Чтобы создать функцию, сохраните ее как псевдоним и сохраните все это в своем профиле позже, используйте:
$g=[guid]::NewGuid();
echo "function G$g { COMMANDS }; New-Alias -Force ALIAS G$g">>$profile
где вы заменили ALIAS
на псевдоним, который вы хотите, и COMMANDS
с командой или строкой команд для выполнения.
Конечно, вместо этого вы можете (и должны!) сделать псевдоним для выше:
echo 'function myAlias {
$g=[guid]::NewGuid();
$alias = $args[0]; $commands = $args[1]
echo "function G$g { $commands }; New-Alias -Force $alias G$g">>$profile
}; New-Alias alias myAlias'>>$profile
На всякий случай, когда ваш мозг получил наизнанку из всей рекурсии (сглаживание псевдонимов и т.д.), после вставки второго блока кода в PowerShell (и перезапуска PowerShell) простой пример его использования:
alias myEcho 'echo $args[0]'
или без аргументов:
alias myLs 'ls D:\MyFolder'
Iff у вас еще нет профиля
Вышеуказанный метод не удастся, если у вас еще нет профиля!
В этом случае используйте New-Item -type file -path $profile -force
из этого ответа.