【问题标题】:apt-get error kills my bash functionapt-get 错误杀死了我的 bash 函数
【发布时间】:2010-11-08 05:08:10
【问题描述】:

我正在尝试为我的 .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。

【问题讨论】:

  • 一些问题:脚本失败时返回的错误代码是什么(echo $?)?您的脚本是否设置了陷阱?您是否在脚本中的任何位置使用 set 命令?
  • 非常适合我。你用的是什么发行版?
  • Ubuntu 10.10,带有 GNU bash,版本 4.1.5(1)-release (x86_64-pc-linux-gnu)
  • 您的~/.bashrc 是否提供任何其他可能影响此的文件?您是否检查了您的 /etc/profile/etc/bash.bashrc(或类似的)以防它们正在运行(对于登录 shell)?

标签: apt-get bash


【解决方案1】:

这不是一个真正的解决方案,而是一个改进建议。

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(由于找不到包而失败),如果是则调用缓存搜索,否则它只会安装包。

【讨论】:

  • 谢谢!我仍然不确定为什么我的旧版本不起作用,但我同意这要好得多。
  • @perimosocordiae:等一下,我马上就会检查你在 10.10 上的版本。编辑:有趣的是,它也适用于我的 10.10 安装。说不出哪里不对劲。对不起。
猜你喜欢
  • 1970-01-01
  • 2020-11-22
  • 2011-08-08
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 2016-01-24
相关资源
最近更新 更多