apt-get error会杀死我的bash函数

我正在尝试为.bashrc编写一个简单的函数,以简化我遇到的常见问题:
$ sudo apt-get install nltk
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package nltk
$ apt-cache search nltk
python-nltk - Python libraries for natural language processing
$ sudo apt-get install python-nltk
所以我写了这个:
function sagi(){
    sudo apt-get install $1 || apt-cache search $1
}
但无论我做什么,在
apt-get install
部分运行并因为无法找到我要求的包之后出错,该功能完全退出。我甚至试过这样做:
function sagi(){
    sudo apt-get install $1
    echo $1
}
失败的apt-get运行后再没有任何结果。奇怪的是,当我跑:
$ sudo apt-get install nltk || apt-cache search nltk
(在bash提示符下)一切都按预期工作。我究竟做错了什么? 编辑:该函数位于我的.bashrc文件的末尾,并在上面完整显示。我查了一下,我的.bashrc在任何地方都不使用
set
。 (我最初怀疑
set -e
可能是罪魁祸首)。没有陷阱,还有来自$的错误代码?是100。     
已邀请:
这不是一个真正的解决方案,而是一个改进建议。
function sagi() {
  sudo apt-get -qq --dry-run install $1
  if [ $? == 100 ]; then
    sudo apt-cache search $1
  else
    sudo apt-get install $1
  fi
}
这将使您获得更干净,更安全的方式来做您想做的事情。首先,它通过首先执行干运行来检查该包是否在存储库中。之后,它检查错误代码是否为100(由于找不到包而失败)并调用缓存搜索,如果是这样,它只是安装包。     

要回复问题请先登录注册