.sh文件不执行所有命令

.sh文件不执行所有命令

我编写了一个 .sh 文件,其中只有一系列 Linux 命令,可以在我需要进行操作系统擦除时自动下载所有所需的文件、软件包和软件。它看起来是这样的:

sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y
sudo apt-get remove --auto-remove cheese -y
sudo ubuntu-drivers autoinstall -y

sudo add-apt-repository -y ppa:kdenlive/kdenlive-stable
sudo add-apt-repository -y ppa:deadsnakes/ppa
sudo add-apt-repository -y ppa:cappelikan/ppa
sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y

sudo apt-get install build-essential git curl wget ca-certificates gnupg lsb-release unrar libglvnd-dev pkg-config libssl-dev libffi-dev python3-dev python3-pip synaptic ubuntu-restricted-extras kdenlive nvidia-cuda-toolkit ffmpeg v4l2loopback-dkms obs-studio p7zip-full bazel-bootstrap libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-dev protobuf-compiler libboost-all-dev libopenblas-dev libleveldb-dev libsnappy-dev libhdf5-dev libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler clang zlib1g  torbrowser-launcher octave liboctave-dev mainline deluge tree dconf-editor nemo spyder octave htop cmake qsharp mthree cirq-core cirq-pascal  pyquil -y

wget https://zoom.us/client/latest/zoom_amd64.deb
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
wget https://github.com/TorchStudio/torchstudio/releases/download/0.9.7/TorchStudio_0.9.7-Linux_Installer.deb
wget https://repo.nordvpn.com/deb/nordvpn/debian/pool/main/nordvpn-release_1.0.0_all.deb?_ga=2.120179208.140754703.1654140064-1729555164.1654140064

git clone https://github.com/qulacs/qulacs.git

sh <(curl -sSf https://downloads.nordcdn.com/apps/linux/install.sh)

#! Install Display driver
#! chmod +x displaylink-driver-*
#! sudo ./displaylink-driver-*

pip3 install –upgrade pip

#! Install python packages
pip3 install numpy pandas Pillow lxml opencv-python matplotlib spotify_dl instaloader scikit-learn scikit-image scipy numba tensorflow tensorflow-addons torch torchvision torchaudio fastai keras jupyterlab notebook qiskit tensorflow-quantum cirq argon2-cffi ipykernel ipython-genutils nbconvert nbformat prometheus-client Send2Trash terminado ipython jupyter-server jupyterlab-server nbclassic vosk pyquil imutils dlib mxnet qulacs torchviz

pip3 install pennylane --upgrade

pip3 install pennylane-sf pennylane-qiskit pennylane-cirq pennylane-forest pennylane-qsharp --force --no-dependencies


#! Install apps
sudo snap install clion --classic
sudo snap install pycharm-professional --classic
sudo snap install webstorm --classic
sudo snap install thunderbird
sudo snap install walc
sudo snap install gimp
sudo snap install telegram-desktop
sudo snap install slack --classic
sudo snap install caprine
sudo snap install skype
sudo snap install teams
sudo snap install android-messages-desktop --edge
sudo snap install discord
sudo snap install code --classic
sudo snap install simplescreenrecorder
sudo snap install vlc
sudo snap install meshlab
sudo snap install amass
sudo snap install obs-studio
sudo snap install inkscape
sudo snap install remmina
sudo snap install netron
sudo snap install feroxbuster
sudo snap install joplin
sudo snap install poweshell –classic
sudo snap install zaproxy –classic
sudo snap install bitcoin-core
sudo snap install flutter –classic
sudo snap alias flutter.dart dart
sudo snap install android-studio –classic

#! Install chrome, zoom and torchstudio
sudo dpkg -i google-chrome-stable_current_amd64.deb
sudo dpkg -i zoom_amd64.deb
sudo dpkg -i TorchStudio*
sudo dpkg -i nordvpn*
sudo chmod 777 ./quacs/script/build_gcc.sh nordvpn*
./qulacs/script/build_gcc.sh
sudo apt-get install ./nordvpn*
sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y
sudo apt-get install nordvpn


sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt autoremove -y

但是,许多命令没有被执行。特别是sudo apt-get install命令和pip3命令。我该如何解决这种情况?我哪里错了?

答案1

回答:

特别是sudo apt-get install命令和pip3命令。

看看你的,sudo apt-get install你可能已经超出了可接受的参数数量,apt-get但我只是猜测,因为文档没有说明有限制。

要调试您的脚本,我建议您运行:

bash -x yourscript.sh

这将输出所有带有所有消息的调用。

如果是这种情况,您可以尝试使用以下for循环和单独的包文件进行安装:

for i in `cat packageList`;do sudo apt-get -y install $i;done

另外,不要忘记您希望在不交互的情况下运行此脚本 - 因此 sudo 不得要求输入密码,其他命令不得要求任何确认或类似信息。

希望能帮助到你。

答案2

这里的东西很少。你没有说你是如何运行它的,但鉴于你没有说任何具体的错误,我猜这是一个后台任务。这意味着您永远不会看到大量 sudo 行的密码提示,导致它们(超时)失败。如果您确实在后台运行它,请使用 >$HOME/Desktop/script.log 2>&1 运行它以查看失败的原因。

您需要将脚本分为需要 sudo 的部分和不需要 sudo 的部分。然后删除所有 sudo 前缀并运行需要它的脚本 (sudo my_cool_reinstall_script.sh) 一次,以便您预先提供密码,脚本中的所有内容都可以按您的预期运行。或者您可以编写 sudoers 规则,允许 sudo apt* 在没有密码的情况下运行,从而按原样执行脚本。

然而,这假设您可能为第一个命令提供了 sudo 密码,宽限时间到期,并且您没有注意到它再次询问并超时。

或者您可能正在尝试安装名称已更改的软件包。我注意到您的 drivers 命令已被弃用,因为自动安装现在只是安装,并且 ubuntu-drivers 也会对此发出警告。

我尝试过类似的方法,但由于 ppa 被更改、关闭、包名称更改以及各种其他问题而放弃,这些问题使其不可行。 NixOS 是我所知道的唯一可以轻松做到这一点的发行版。

如果不知道如何以看不到失败命令的错误的方式运行它,现在很难说。

-- 另外,不,您还没有达到任何需要循环的 apt 限制。如果有限制的话,我还没有达到它,而且我已经在一个衬管中安装了更多的东西。

相关内容