添加新行时 Bash 文件无法找到包

添加新行时 Bash 文件无法找到包

在构建要执行的 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查看运行前/后dos2unixunix2dos文件的差异。

相关内容