这个问题似乎经常被问到,但对我的问题仍然没有令人满意的答案。因此,我希望你能帮助我。
在Ubuntu LTE 13.04下打开终端时出现以下错误:
意外令牌
done' bash: /usr/share/bash-completion/bash_completion: line 225:
附近的语法错误'
我查看了具体的' bash_completion' - 似乎很好。 此外,我将其缩小到我的.bashrc文件中的以下命令。
alias do='rsync -r -e ssh --exclude='file.py' user@server.xxx.de:/path/to/folder /do/here'
虽然以下工作完全没有引起任何例外:
alias up='rsync -r -e ssh --exclude='file.py' /path/to/folder user@seerver.xxx.de:/do/here'
我检查了它是否因--exclude
标志而发生,但它没有。似乎命令有问题。虽然这两个命令完全完成他们的工作。只有第一个引发错误。
有什么想法吗?
答案 0 :(得分:7)
在bash中,do
是一个保留字。它正在寻找do ... done
块。只需将别名命名为别的。
答案 1 :(得分:3)
do
是一个shell关键字。您不能将其用作别名而不会导致错误。
除此之外 - 考虑使用函数而不是别名;它们提供了更多的控制。这个别名可能会被重写为:
do_sync() {
rsync -r -e ssh --exclude='file.py' \
user@server.xxx.de:/path/to/folder \
/do/here \
"$@"
}
使用函数代替别名可以让你做条件逻辑,在尾部以外的位置插入参数,并显着简化引用(对于你的别名来说,几乎可以肯定的是,它并没有做你想要的,因为您在别名文本和别名文本中使用相同的引号类型而没有转义)。
答案 2 :(得分:0)
就像我在另一个线程中所说的那样,我错误地给local
加上了别名,这也赋予了bash_completion脚本相同的corrupted behavior
……
因此,只是提醒您避免给禁止使用的单词加上别名,例如local
do
done
等。
希望能帮助到你 :)
干杯