在构建要执行的 bash 文件时,添加新行后我总是收到错误。我尝试移动一些行或删除一些包,但会导致相同的错误。如果我在文件中删除 3 和 4,就不会再出现错误。
E: Unable to locate package <package>
bash 文件如下所示
#!/usr/bin/env bash
sudo apt update && sudo apt install -y python3-pip build-essential python3-dev python3-setuptools gcc sshpass
sudo apt-get install apt-transport-https lsb-release software-properties-common dirmngr
sudo apt-get update
带有错误的输出
Hit:1 http://us.archive.ubuntu.com/ubuntu bionic InRelease
Get:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Hit:3 http://archive.ubuntu.com/ubuntu bionic InRelease
Get:4 http://us.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:5 http://us.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Fetched 252 kB in 1s (189 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package sshpass
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package dirmngr
Hit:1 http://us.archive.ubuntu.com/ubuntu bionic InRelease
Get:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Hit:3 http://archive.ubuntu.com/ubuntu bionic InRelease
Get:4 http://us.archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:5 http://us.archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Fetched 252 kB in 1s (209 kB/s)
Reading package lists... Done
答案1
可能发生的情况是,您的文件中有一些 Windows 样式的行尾。也许该文件是在某个时候从 Windows 系统复制的,或者您使用的文本编辑器默认使用 Windows 样式的行尾?无论如何,如果我在类似的文件中添加这样的行尾,我就能重现这种行为。
修复此问题的一种方法是使用命令dos2unix
将文件中的所有行尾更改为 unix 样式的行尾(而\n
不是\r\n
在每行末尾)。首先安装它:
sudo apt install dos2unix
然后在您的文件上运行它,如果文件名是 myfile.sh,那么只需执行以下操作:
dos2unix myfile.sh
输出结果如下:
dos2unix: converting file myfile.sh to Unix format...
之后您的脚本就可以正常工作了,您将不再会收到“E:无法找到包”错误。
相反的命令unix2dos
也可用,如果您希望问题再次出现,可以使用该命令。:-)
为了进一步操作,您可以使用例如hexdump -C myfile.sh
查看运行前/后dos2unix
或unix2dos
文件的差异。