.bashrc 中的函数定义不起作用

.bashrc 中的函数定义不起作用
submit () {
    kaggle c submit -f $@ -m MSG h-and-m-personalized-fashion-recommendations;
}

我想使用上述函数作为向 kaggle 竞赛提交文件的简写,只需键入 即可submit FILE。作为 Bash 新手,我在设置它时遇到了问题。当我将它放入测试脚本test.sh并运行该脚本时,该函数运行正常,但当我将其放入时.bashrcsource .bashrc我收到以下错误:

bash: .bashrc: line 148: syntax error near unexpected token `('
bash: .bashrc: line 148: `submit () {'

这不是我的代码中其他东西伪装的错误,因为当我只删除该函数(这三行而不触及任何其他行)时,source .bashrc不再引发错误。

再次,将其放在单独的脚本中并运行该脚本bash test.sh可以完美运行,因此没有语法错误。 也将函数从 复制并粘贴到test.sh.bashrc因此两者中的函数完全相同。

答案1

问题在于名称。只需更改submitksubmit即可解决问题。我之前有一个名为 submit 的别名,它可能导致某种冲突,因为 bash 替换了它,而不是意识到它是一个函数定义。我通过从ksubmit.bashrc 中删除并添加 来重现该问题alias ksubmit="kaggle c list"。然后sourceing .bashrc。接着,在同一个 shell 中,从 .bashrc 中删除别名定义并ksubmit再次添加函数定义,然后获取它。给出上面的语法错误。只需取消别名或启动一个新的 shell。

问题很简单,但很难调试,因为当您没有经验时,错误消息并不能真正指出问题所在。

相关内容