我正在尝试向我的 bashrc 添加一些功能,即:
h () { history | fgrep $1 | sort -u | cut -b 8- }
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) rar e $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "I don't know how to extract '$1'." ;;
esac
else
echo "'$1' is not a valid file!"
fi
}
使用以下命令:
echo -e "\
h () { history | fgrep \044\061 | sort -u | cut -b 8- }
extract () {
if [ -f \044\061 ] ; then
case \044\061 in
*.tar.bz2) tar xvjf \044\061 ;;
*.tar.gz) tar xvzf \044\061 ;;
*.bz2) bunzip2 \044\061 ;;
*.rar) rar e \044\061 ;;
*.gz) gunzip \044\061 ;;
*.tar) tar xvf \044\061 ;;
*.tbz2) tar xvjf \044\061 ;;
*.tgz) tar xvzf \044\061 ;;
*.zip) unzip \044\061 ;;
*.Z) uncompress \044\061 ;;
*.7z) 7z x \044\061 ;;
*) echo \042I don't know how to extract '\044\061'.\042 ;;
esac
else
echo \042'\044\061' is not a valid file\041\042
fi
}" >> ~/.bashrc
...但这会导致bash: /home/chris/.bashrc: line 123: syntax error: unexpected end of file
bash 启动时出现此错误。如果我删除这些函数,此错误就会消失。我是否必须在函数部分添加一些结束语句?
答案1
第一行就是问题所在。
h () { history | fgrep $1 | sort -u | cut -b 8- }
将其更改为:
h () { history | fgrep $1 | sort -u | cut -b 8- ; }
或者:
h () {
history | fgrep $1 | sort -u | cut -b 8-
}
此外,将其放入您的一个更简单/更干净的方法.bashrc
是使用重定向(尽管您仍然需要退出$
)。
cat >> .bashrc << EOF
h () { history | fgrep \$1 | sort -u | cut -b 8- ; }
extract () {
if [ -f \$1 ] ; then
case \$1 in
*.tar.bz2) tar xvjf \$1 ;;
*.tar.gz) tar xvzf \$1 ;;
*.bz2) bunzip2 \$1 ;;
*.rar) rar e \$1 ;;
*.gz) gunzip \$1 ;;
*.tar) tar xvf \$1 ;;
*.tbz2) tar xvjf \$1 ;;
*.tgz) tar xvzf \$1 ;;
*.zip) unzip \$1 ;;
*.Z) uncompress \$1 ;;
*.7z) 7z x \$1 ;;
*) echo "I don't know how to extract '\$1'." ;;
esac
else
echo "'\$1' is not a valid file!"
fi
}
EOF
答案2
将您的shebang更改为
/bin/bash -x #!/bin/bash -x
然后再次运行程序,得到逐行跟踪。通常意外的文件结尾是未闭合的引号或括号。