如何去除討厭的 ls、curl PowerShell 別名?
| | | 0 | |
微軟新推出 Windows UNIX 工具包 - Coreutils for Windows,大家在讚賞之餘,PowerShell 有些看似方便實則煩人的別名,ls、curl、rmdir... 不意外被拿出來狂鞭。
講到 PowerShell 的別名(Alias),有些還挺方便的,像我平常會用 gci、?、%、select、where、foreach,能少打不少字。但我對 ls、curl、rmdir... 這類與 CMD、Bash 指令撞名的別名就很感冒,超容易造成混淆。單獨執行還行,一旦順著直覺用 CMD、Bash 的習慣下參數,等按 Enter 噴出 PowerShell 才會驚覺「幹! 這裡是 PowerShell,不能這樣打」。

為了避免認知混淆,我寧可不要這些別名,PowerShell 按 Tab 有自動完成不至於打字打到死,再不然如 Invoke-WebRequest 還有 iwr 別名可用,curl 該留給真正的 curl 就好。而在 Coreutils for Windows 推出後,別名衝突問題進一步被放大了 N 倍!
問題不難解,不想要這些別名把它們清掉就是了。
以下段程式可清光所有與 Coreutils for Windows 衝突的別名,另外再加碼 curl,讓這些 CMD、Bash 慣用指令回歸正宗,不要再被 PowerShell 綁架~ (若有其他想除之而後快的別名,可一併加入清單)
@('arch', 'b2sum', 'base32', 'base64', 'basename', 'basenc', 'cat', 'cksum', `
'comm', 'cp', 'csplit', 'cut', 'date', 'df', 'dirname', 'du', 'echo', 'env', `
'expr', 'factor', 'false', 'find', 'fmt', 'fold', 'grep', 'head', 'hostname',`
'join', 'la', 'link', 'ln', 'ls', 'md5sum', 'mkdir', 'mktemp', 'mv', 'nl', `
'nproc', 'numfmt', 'od', 'pathchk', 'pr', 'printenv', 'printf', 'ptx', 'pwd',`
'readlink', 'realpath', 'rm', 'rmdir', 'seq', 'sha1sum', 'sha224sum', `
'sha256sum', 'sha384sum', 'sha512sum', 'shuf', 'sleep', 'sort', 'split', 'stat',`
'sum', 'tac', 'tail', 'tee', 'test', 'touch', 'tr', 'true', 'truncate', 'tsort',`
'unexpand', 'uniq', 'unlink', 'uptime', 'wc', 'xargs', 'yes', 'curl') |
ForEach-Object {
$found = Get-Item Alias:$_ -ErrorAction SilentlyContinue
if ($found) { Remove-Item Alias:$found -Force }
}

以上動作只在當次 Session 有效,下次重開 PowerShell 別名又會再跑出來。若不想再看到它們,可將這段語法寫進 $PROFILE 設定檔(C:\Users\<username>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1),每次啟用 PowserShell 前執行,未來就不會再被這些別名困擾了。
$script = @'
@('arch', 'b2sum', 'base32', 'base64', 'basename', 'basenc', 'cat', 'cksum', `
'comm', 'cp', 'csplit', 'cut', 'date', 'df', 'dirname', 'du', 'echo', 'env', `
'expr', 'factor', 'false', 'find', 'fmt', 'fold', 'grep', 'head', 'hostname',`
'join', 'la', 'link', 'ln', 'ls', 'md5sum', 'mkdir', 'mktemp', 'mv', 'nl', `
'nproc', 'numfmt', 'od', 'pathchk', 'pr', 'printenv', 'printf', 'ptx', 'pwd',`
'readlink', 'realpath', 'rm', 'rmdir', 'seq', 'sha1sum', 'sha224sum', `
'sha256sum', 'sha384sum', 'sha512sum', 'shuf', 'sleep', 'sort', 'split', 'stat',`
'sum', 'tac', 'tail', 'tee', 'test', 'touch', 'tr', 'true', 'truncate', 'tsort',`
'unexpand', 'uniq', 'unlink', 'uptime', 'wc', 'xargs', 'yes', 'curl') |
ForEach-Object {
$found = Get-Item Alias:$_ -ErrorAction SilentlyContinue
if ($found) { Remove-Item Alias:$found -Force }
}
'@
if (Test-Path $PROFILE) {
Add-Content -Path $PROFILE -Value $script
} else {
New-Item -Path $PROFILE -ItemType File -Force -Value $script
}
Comments
Be the first to post a comment