当我打开终端时,会发现以下错误:
bash: /usr/share/bash-completion/bash_completion: line 171: syntax error near unexpected token `}'
bash: /usr/share/bash-completion/bash_completion: line 171: `}'这是因为bash-completion文件的这个区域:
_upvar()
{
if unset -v "$1"; then # Unset & validate varname
if (( $# == 2 )); then
eval $1=\"\$2\" # Return single value
else
eval $1=\(\"\${@:2}\"\) # Return array
fi
fi
}为什么我在那部分出了个错误?
发布于 2018-06-16 16:58:53
我认为这可能是与这个U&L职位相同的问题:您有fi的别名。脚本在大多数情况下都很好,但是混叠shell关键字可能会导致意想不到的问题:
$ alias fi=find
$ . /usr/share/bash-completion/bash_completion
bash: /usr/share/bash-completion/bash_completion: line 171: syntax error near unexpected token `}'
bash: /usr/share/bash-completion/bash_completion: line 171: `}'尽管该函数位于第170行左右,但它是该文件中使用fi的第一个位置。这可能是在设置别名之后第一次使用fi,具体取决于您放置别名的位置,以及bash提供的bash完成脚本的具体位置。
发布于 2018-06-17 19:32:44
要查看您的别名是否与bash内置或系统命令冲突,请使用以下脚本:
#!/bin/bash -i
# NAME: alias-check
# PATH: /mnt/e/bin
# DESC: Verify alias doesn't conflict with bash built-in
# DATE: June 17, 2018.
# Get aliases
alias > /tmp/alias.lst
sed -i 's/=.*//; s/alias //g' /tmp/alias.lst
#cat /tmp/alias.lst
while read -r line
do
command type -a ${line}
done< /tmp/alias.lst编辑~/.bashrc并插入以下“坏”别名:
alias fi=find
alias test='ls test'现在运行脚本alias-check:
bash: /home/rick/.bashrc: line 171: syntax error: unexpected end of file
alert is aliased to `notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e 's/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//')"'
cdd is aliased to `cd /home/rick/SERVER/#/Dump'
cdh is aliased to `cd /home/rick'
cdm is aliased to `cd /media/rick/ST9_Win7/Users/Person/Music/iTunes/iTunes Media/Music'
egrep is aliased to `egrep --color=auto'
egrep is /bin/egrep
fgrep is aliased to `fgrep --color=auto'
fgrep is /bin/fgrep
fi is aliased to `find'
fi is a shell keyword
grep is aliased to `grep --color=auto'
grep is /bin/grep
l is aliased to `ls -CF'
la is aliased to `ls -A'
ll is aliased to `ls -alF'
ls is aliased to `ls --color=auto'
ls is /bin/ls
lsdrv is aliased to `lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MODEL'
redalert is aliased to `notify-send --urgency=critical -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e 's/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//')"'
sudo is aliased to `sudo '
sudo is /usr/bin/sudo
test is aliased to `ls test'
test is a shell builtin
test is /usr/bin/test
zenity is aliased to `zenity 2>/dev/null'
zenity is /mnt/e/usr/local/bin/zenity
zenity is /usr/local/bin/zenity
zenity is /usr/bin/zenity请注意以下几行:
在别名中查找这些类型的错误。
测试后,不要忘记删除别名fi和test,并再次保存~/.bashrc。
您不能简单地在命令行中发出别名来运行测试,因为脚本#!/bin/bash -i的第一行使用~/.bashrc加载了一个新的shell。
https://askubuntu.com/questions/1046930
复制相似问题