【问题标题】:Installing programs via shell script; programs not found?通过 shell 脚本安装程序;没有找到程序?
【发布时间】:2016-06-14 01:55:54
【问题描述】:

我正在编写一个 shell 脚本,以便我可以通过 OpenStack 在新的虚拟机上快速安装依赖项。我已经在脚本文件中编写了这些依赖项,但在运行时,我收到以下每个错误:

E: unable to locate package ***
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: unable to locate package **** 

等等。我不确定出了什么问题,因为我知道我列出的软件包存在,并且运行 sudo apt-get install *** (在文件中包含软件包名称)按预期工作。我的 shell 文件如下所示:

#!/bin/bash      
#shell script for installation on a VM
#i've never written a shell script before so bear with me please

apt-get update
apt-get --assume-yes install build-essential
apt-get --assume-yes install git
apt-get --assume-yes install make
apt-get --assume-yes install xclip
apt-get --assume-yes install python
apt-get --assume-yes install liblapack-dev
apt-get --assume-yes install libblas-dev
apt-get --assume-yes install libboost-dev
apt-get --assume-yes install libarmadillo-dev

我将它作为 sudo bash freshinstallscript.sh 运行。

【问题讨论】:

  • 您是否正确配置了存储库?
  • 使用set > cmdLine.env将您的环境从cmd行中提取到一个文件中并在您的shell脚本顶部添加类似的内容,即set >script.env然后比较它们,comm cmdLine.env script.env也许你会发现不同之处在第一列或第二列(第三列是在两个文件中找到的数据)。祝你好运。
  • 愚蠢的问题,这里——你是怎么写这个脚本的?如果它有 DOS 换行符,那就可以解释这个错误——可能存在一个名为 xclip 的包,但不会有一个名为 xclip$'\r' 的包,如果你在 Windows 中编写这个脚本就会得到这个用记事本复制它,而不是使用本机 UNIX 文本编辑器。
  • 也就是说,如果你有这个错误,你会得到其他错误之前 unable to locate package 错误。仅提供部分日志意味着我们在这个问题中没有足够的信息来检查它们并因此验证理论。

标签: linux bash shell


【解决方案1】:

我解决了这个问题;它似乎与行尾有关。为了解决这个问题,我安装了 dos2unix 并转换了 shell 文件。

【讨论】:

    猜你喜欢
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 2019-09-05
    • 1970-01-01
    • 2015-01-14
    • 2012-07-25
    相关资源
    最近更新 更多