将别名交换到cygwin bash中的函数时出错

将别名交换到cygwin bash中的函数时出错,bash,cygwin,Bash,Cygwin,问题: 在my.bashrc文件中将别名重新创建为函数时,如果函数名与别名的上一个名称相同,则会发生错误 详细信息: 我已经从.bashrc文件中删除了先前的别名 将函数名称更改为以前未使用过的名称时,它会正常工作 文件中较高的代码似乎也可以正常工作 [编辑]我还可以运行.bashrc文件中不再存在的旧别名 示例: 更改此选项时: alias npp='(/c/SolsApplications/NotePad++/notepad++.exe &> /dev/null &

问题: 在my.bashrc文件中将别名重新创建为函数时,如果函数名与别名的上一个名称相同,则会发生错误

详细信息:

  • 我已经从.bashrc文件中删除了先前的别名

  • 将函数名称更改为以前未使用过的名称时,它会正常工作

  • 文件中较高的代码似乎也可以正常工作
  • [编辑]我还可以运行.bashrc文件中不再存在的旧别名
示例:

更改此选项时:

alias npp='(/c/SolsApplications/NotePad++/notepad++.exe &> /dev/null &)'
为此:

npp()
{
    if [[ $1 != null ]]; then
        ('/c/SolsApplications/NotePad++/notepad++.exe' $1 &> /dev/null &)
    else
        ('/c/SolsApplications/NotePad++/notepad++.exe' &> /dev/null &);
    fi
}
刷新.bashrc文件时发生以下错误:

bash: /c/Users/Owner/.bashrc: line 33: syntax error near unexpected token `('

bash: /c/Users/Owner/.bashrc: line 33: `npp()'
我尝试过的:

  • 正在清除我的.bash_历史文件
  • 重新启动bash
  • 搜索互联网
  • 添加这样一个空格:“npp()”

别名是简单的前缀扩展。因此,如果您已经提供了别名
npp
,则可以将您的函数定义更改为以下内容:

(/c/SolsApplications/NotePad++/notepad++.exe &> /dev/null &)() {
    if [[ $1 != null ]]; then
        ('/c/SolsApplications/NotePad++/notepad++.exe' $1 &> /dev/null &)
    else
        ('/c/SolsApplications/NotePad++/notepad++.exe' &> /dev/null &);
    fi
}
找到添加此别名的位置并删除它就足够了。如果您在执行此操作时遇到困难,只需在定义函数之前立即解除对其的约束:

unalias npp
npp() {
  ...
}
还可以考虑通过日志记录启动交互式shell,并查看这些日志,以确定别名的生成位置(如果别名来自点文件或类似文件):


别名是简单的前缀扩展。因此,如果您已经提供了别名
npp
,则可以将您的函数定义更改为以下内容:

(/c/SolsApplications/NotePad++/notepad++.exe &> /dev/null &)() {
    if [[ $1 != null ]]; then
        ('/c/SolsApplications/NotePad++/notepad++.exe' $1 &> /dev/null &)
    else
        ('/c/SolsApplications/NotePad++/notepad++.exe' &> /dev/null &);
    fi
}
找到添加此别名的位置并删除它就足够了。如果您在执行此操作时遇到困难,只需在定义函数之前立即解除对其的约束:

unalias npp
npp() {
  ...
}
还可以考虑通过日志记录启动交互式shell,并查看这些日志,以确定别名的生成位置(如果别名来自点文件或类似文件):



请随时提出编辑建议或要求规范。谢谢您的时间。您已经定义了
npp()
。因此,当搜索
.bashrc
时,它认为您试图执行
npp()
,这在语法上是错误的。您需要取消定义
npp()
。若要删除以前的
npp()
定义,请使用
unset npp
。如果问题是语法,则无论使用什么新名称,它都将失败。但事实上,只要新名字一出现,它就会起作用,这意味着旧名字是完整的。要验证旧名称是否存在,只需运行旧名称,就会看到出现
notepad++
。至于为什么
cygwin
会保留旧名字,而不管它们是否被破坏,这可能是你应该问的问题be@John1024-这是预期的行为。但OP似乎正在使用
cygwin
或类似的产品将函数定义存储在windows的注册表中。@Squighopper25,…好吧,alvits在前面已经提出,cygwin可能会将它们放在注册表中,尽管我个人无法说出这一点的真相。您是否尝试过使用
unalias
并查看这种情况是否仍然存在?请随时提出编辑建议或请求规范。谢谢您的时间。您已经定义了
npp()
。因此,当搜索
.bashrc
时,它认为您试图执行
npp()
,这在语法上是错误的。您需要取消定义
npp()
。若要删除以前的
npp()
定义,请使用
unset npp
。如果问题是语法,则无论使用什么新名称,它都将失败。但事实上,只要新名字一出现,它就会起作用,这意味着旧名字是完整的。要验证旧名称是否存在,只需运行旧名称,就会看到出现
notepad++
。至于为什么
cygwin
会保留旧名字,而不管它们是否被破坏,这可能是你应该问的问题be@John1024-这是预期的行为。但OP似乎正在使用
cygwin
或类似的产品将函数定义存储在windows的注册表中。@Squighopper25,…好吧,alvits在前面已经提出,cygwin可能会将它们放在注册表中,尽管我个人无法说出这一点的真相。您是否尝试过使用unalias,看看这种情况是否仍然存在?我相信您在一定程度上解决了这个问题。我认为每次登录都需要重做“unalias”。然而,这并不是一个真正的问题,目前我可以使用另一个别名来解除不推荐的别名的状态,直到我了解更多关于路径日志记录的内容。另外,据我所知,Windows10的周年纪念更新将在本机上包括BashShell。这意味着像这样的第三方软件问题永远不会困扰像我这样的人。我的理解是,这个“本机”外壳实际上将在虚拟机中运行,因此,如果你想让它与你的Windows软件的其他部分在同一主机上运行,就不那么多了……而且,微软在这方面的记录也不太好。请参阅他们的早期尝试中的一段历史,其中包括一个“真正的”UNIX shell。@ SkyIopPr25,…BTW,使用我给你们的容易的,考虑在您的命令行运行以下代码:<代码> PS4=:$BasHyObjase:$LINENO + 'BASH-X-L 2>1>GRIP-E别名<代码>,我的一个愿望是Windows 10的原生BASH…我试试那个命令。谢谢,我相信你在一定程度上解决了这个问题。我认为每次登录都需要重做“unalias”。然而,这并不是一个真正的问题,目前我可以使用另一个别名来解除不推荐的别名的状态,直到我了解更多关于路径日志记录的内容。另外,据我所知,Windows10的周年纪念更新将在本机上包括BashShell。这意味着像第三方软件这样的问题永远不会困扰像我这样的人我的理解是