BASH:语法错误附近的意外标记`完成'别名为'做'

这个问题似乎经常被问到,但对于我的问题仍然没有令人满意的答案。 因此,我希望你能帮助我。

在Ubuntu LTE 13.04下打开terminal时出现以下错误:

语法错误附近意外的令牌done' bash: /usr/share/bash-completion/bash_completion: line 225: done'

我检查了具体的“bash_completion” – 似乎很好。 此外,我将其缩小到我的.bashrc文件中的以下命令。

 alias do='rsync -r -e ssh --exclude='file.py' user@server.xxx.de:/path/to/folder /do/here' 

虽然下面的工作完全没有任何exception:

 alias up='rsync -r -e ssh --exclude='file.py' /path/to/folder user@seerver.xxx.de:/do/here' 

我检查了是否因为--exclude标志而发生,但是没有。 似乎命令有问题。 虽然两个命令都完美地完成了他们的工作 只有第一个提出错误。 有任何想法吗 ?

在bash中, do是一个保留字。 它正在寻找一个do ... done块。 只要命名你的别名别的东西。

do是一个shell关键字。 您不能将其用作别名,而不会导致错误。

除此之外 – 考虑使用函数而不是别名; 他们提供了更多的控制。 这个别名可能被重写为:

 do_sync() { rsync -r -e ssh --exclude='file.py' \ user@server.xxx.de:/path/to/folder \ /do/here \ "$@" } 

使用函数而不是别名可以让你做条件逻辑,在尾部以外的位置插入参数,并且大大简化了引用(对于你的别名来说,这里的别名几乎肯定没有做你想做的事情,因为你使用的是在别名文本和别名文本中都是相同的引用类型,不能转义)。