我使用的是Windows 11计算机(Powershell v5.1),我尝试将rust重写的coreutils别名为Powershell中的适当命令。例如,我需要调用coreutils echo
来访问echo
命令,对于mv
、cat
、cp
等也是如此。因此,我编写了一个函数来输出命令字符串,并将其传递给Set-Alias
cmdlet。
但是,我得到以下错误。
echo : The term 'coreutils echo' is not recognized as the name of a cmdlet, function, script file, or operable
program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ echo
+ ~~~~
+ CategoryInfo : ObjectNotFound: (coreutils echo:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
这是我的powershell配置。
# neovim config alias
function Open-NeovimConfig {
$CurrPath = pwd
cd C:\Users\adity\AppData\Local\nvim\lua\user\
nvim .\init.lua
cd $CurrPath
}
# coreutils command specifier
function Coreutils-Cmd($Cmd) {
return "coreutils $Cmd"
}
Set-Alias nvimc Open-NeovimConfig
Set-Alias ls lsd -Option AllScope
Set-Alias echo (Coreutils-Cmd "echo") -Option AllScope
Set-Alias cat (Coreutils-Cmd "cat") -Option AllScope
Set-Alias cp (Coreutils-Cmd "cp") -Option AllScope
编辑:基于圣地亚哥的评论,我做了以下工作。然而,有很多重复的逻辑。有什么改进的建议吗?
function echo {coreutils echo $args}
function cat {coreutils cat $args}
function rm {coreutils rm $args}
function cp {coreutils cp $args}
function mv {coreutils mv $args}
1条答案
按热度按时间wn9m85ua1#
您可以使用循环和
Set-Item
自动化该过程,以动态定义这些函数:这样做的唯一原因是函数名恰好与传递给
coreutils
的参数相同,而且这里需要使用.GetNewClosure()
,否则脚本块将使用$cmd
的最后一个值。