在 WSL 中运行 shell 脚本时出现“E:无效的操作更新”错误

"E: Invalid operation update" error while running shell scripts in WSL

提问人:AnjK 提问时间:3/20/2019 最后编辑:AnjK 更新时间:6/30/2023 访问量:16759

问:

我有一个名为 shell 脚本,其中包含:setup_wsl.sh

#!/bin/bash

echo "hai"
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"  
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

当我在 WSL 中以 ./setup_wsl.sh 身份运行脚本时(安装的发行版是 ubuntu 18.04),错误发生如下:

hai
E: Invalid operation update
E: Unable to locate package
./setup_wsl.sh: 4: ./setup_wsl.sh: apt-transport-https: not found
./setup_wsl.sh: 5: ./setup_wsl.sh: ca-certificates: not found
curl: (3) Illegal characters found in URL
./setup_wsl.sh: 7: ./setup_wsl.sh: gnupg-agent: not found
: not found ./setup_wsl.sh: software-properties-common
: not found ./setup_wsl.sh:

脚本的第一个命令工作正常,因为它给出输出“hai”。

有人可以帮我找出发生这些错误的原因吗?

文件 sh sudo ubuntu-18.04 windows-subsystem-for-linux

评论


答:

29赞 Sewon Yun 5/31/2019 #1

这是因为 Windows 中的回车。 使用文本编辑器切换到 LF 托架并保存新托架以运行脚本 或者 sed -i -e 's/\r$//' setup_wsl.sh

评论

1赞 moztemur 9/2/2019
多谢。我在通过 Vagrant 在 Windows 上使用 Linux VM 并将 Windows Notepad++ 中同步的 sh 文件修改为 CRLF 时遇到了这个问题。刚刚将其更改为 LF,它已经起作用了。
0赞 zeocrash 4/27/2020
这对我来说是一个巨大的帮助。修复了该问题。
8赞 M.Ali El-Sayed 7/29/2020 #2

对于任何使用Notepad ++的人,请转到编辑 => EOL 转换 => Unix(LF) 如下图所示enter image description here

2赞 Rami Alloush 12/14/2021 #3

对于 VSCode,您只需要在状态栏中设置它即可

vscode return

更多详细信息和选项,请点击此处 https://qvault.io/clean-code/line-breaks-vs-code-lf-vs-crlf/

0赞 Chiwda 11/25/2022 #4

如前所述,这是由 Windows 与 *nix 中 CR-LF 的差异引起的。但是,由于我不想修改 Notepad++ 或其他编辑器(我在多个环境中使用我的文件),因此我有不同的解决方案。只需将文件传输到 8nix 机器后使用 Dos2Unix。

sudo apt-get install dos2unix
dos2unix *.sh
0赞 Shankar ARUL 6/30/2023 #5

运行

> sudo -i

然后

> sudo apt-get update

做诀窍