bash 脚本中 apt-get 失败?

bash 脚本中 apt-get 失败?

我有几台机器(运行 Ubuntu LTS 12.4 64 位)需要以相同的方式进行配置,因此我创建了一个 shell 脚本,它将在机器第一次启动时自动运行。它在大多数情况下都有效,但任何对 apt-get 的调用都会失败。作为示例,这里有两个我要执行的命令。

debconf-set-selections ./files/ldap.preseed
apt-get -y install ldap-auth-client

如果我直接输入这些行,结果如下:

root@spare:/tmp/scripts# debconf-set-selections ./files/ldap.preseed
root@spare:/tmp/scripts# apt-get -y install ldap-auth-client
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be installed:
  ldap-auth-config libnss-ldap libpam-ldap
The following NEW packages will be installed:
  ldap-auth-client ldap-auth-config libnss-ldap libpam-ldap
0 upgraded, 4 newly installed, 0 to remove and 67 not upgraded.
Need to get 0 B/200 kB of archives.
After this operation, 877 kB of additional disk space will be used.
Preconfiguring packages...
[and so on...]

但如果我执行仅包含这些行的 shell 脚本,则会发生这种情况:

root@spare:/tmp/scripts# ./ldap.cr
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package ldap-auth-client

当我使用 sudo 运行脚本或先将其 chown 为 root 时,也会发生同样的情况。如果直接调用或通过 shell 脚本调用,对于程序来说有什么区别?是否有可能以其他方式说服它?

编辑:更多信息:

root@spare:/tmp/scripts# apt-cache policy ldap-auth-client
ldap-auth-client:
  Installed: (none)
  Candidate: 0.5.3
  Version table:
    0.5.3.0
       500 http://us.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

答案1

在执行脚本之前通过 dos2unix 运行该脚本会使其正常工作。我猜测 apt-get 正在读取行末尾的额外 \r 作为包名称的一部分,从而寻找 ldap-auth-client\r (不存在)而不是 ldap-auth -客户端(确实如此)。

答案2

尝试运行以下命令

apt-get update         

执行之前apt-get 安装命令

还要确保网址/etc/apt/sources.list可用。

相关内容