Puncte:0

Cum pot reîncărca bashrc într-un script și nu eșuez?

drapel cl

Am scris un script care descarcă și instalează anaconda3 și alte dependențe, apoi instalează câteva module Python folosind pip3.
Problema este că al meu sursa ~/.bashrc nu pare să funcționeze și astfel pip3nu sunt recunoscute. Daca folosesc exec bash, instrucțiunile rămase după această comandă nu sunt executate. Ce ar trebuii să fac? Acesta este scenariul meu de altfel:

#!/bin/bash

## Script Bash pentru configurarea unui mediu de dezvoltare PX4 pe Ubuntu LTS (16.04 și mai sus).
## Poate fi folosit pentru instalarea simulatoarelor (numai) sau pentru instalarea precondițiilor pentru Snapdragon Flight sau Raspberry Pi.
##
## Instalări:
## - Dependențe și instrumente comune pentru toate țintele (inclusiv: sistemul de construcție Ninja, cele mai recente versiuni de cmake, git, anaconda3, pyulog)
## - dependențe ale simulatorului jMAVSim
## - Sursa PX4/Firmware (la ~/src/Firmware/)

# Prevenirea expirării sudo https://serverfault.com/a/833888
capcană „ieșire” INT TERM; capcană "kill 0" EXIT; sudo -v || ieșire $?; somn 1; în timp ce adevărat; dormi 60; sudo -nv; terminat 2>/dev/null &

# Configurare Ubuntu
echo „Eliminați modemmanager”
sudo apt-get remove modemmanager -y
echo „Adăugați utilizator la grupul de apelare pentru acces la portul serial (repornire necesară)”
sudo usermod -a -G dialout $USER

# Actualizați CMake și Git
# Instalarea celei mai recente versiuni de cmake (ref https://askubuntu.com/questions/355565/#865294)
echo „Se instalează cea mai recentă versiune de CMake”
sudo apt update && \
sudo apt install -y software-properties-common lsb-release && \
sudo apt clean all
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
sudo apt-add-repository „deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main”
actualizare sudo apt
sudo apt install kitware-archive-keyring
sudo rm /etc/apt/trusted.gpg.d/kitware.gpg
actualizare sudo apt
sudo apt install cmake

# Instalarea celei mai recente versiuni de git
echo „Instalarea celei mai recente versiuni de git”
sudo add-apt-repository -y ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git -y

# Instalați anaconda3
tastați conda >>/dev/null 2>&1 || { echo >&2 „Se instalează anaconda3 (python 3.8.8)”; wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh; bash ./Anaconda3-2021.05-Linux-x86_64.sh;}

sursa ~/.bashrc
. ~/.bashrc

# Dependențe comune
echo „Instalarea dependențelor comune”
sudo apt-get update -y
sudo apt-get install git zip cmake build-essential genromfs ninja-build exiftool astyle -y
# asigurați-vă că xxd este instalat, pachet dedicat xxd începând cu Ubuntu 18.04, dar a fost strivit în vim-common înainte
care xxd || sudo apt install xxd -y || sudo apt-get install vim-common --no-install-recommends -y
# Pachete python necesare
pip3 instalează argparse empy toml numpy
pip3 instalează panda jinja2 pyserial pyyaml
pip3 instalează pyulog

# Dependențe ale simulatorului jMAVSim
echo „Instalarea dependențelor simulatorului jMAVSim”
sudo apt-get install ant openjdk-8-jdk openjdk-8-jre -y

Hossein avatar
drapel cl
Mulțumesc, dar se pare că nu provoacă probleme, deoarece îl descarcă și îl instalează foarte bine (deși l-am rezolvat deja datorită ție). aprovizionarea dublă este doar acolo, deoarece odată aprovizionarea nu a făcut nimic. nici cei doi nu fac nici un bine.
Puncte:0
drapel in

Încercați să rulați următorul cod după sursa ~/.bashrc, ceea ce îl face pe Bash să uite toate căile complete amintite:

$ hash -r

Din manualul Bash:

hash [-r] [-p nume fișier] [-dt] [nume]

De fiecare dată când este invocat hash, își amintește căile complete ale comenzilor specificate ca argumente de nume, astfel încât acestea nu trebuie căutate la invocări ulterioare. [...] Opțiunea -r face ca shell-ul să uite toate locațiile amintite.

Puncte:0
drapel cl

A trebuit să folosesc eval la sursa ~/.bashrc cu succes. Am facut asta :

eval "$(cat ~/.bashrc | coada -n +10)"

Citând din Aici:

Acest comportament este specific Ubuntu (și probabil cel mai derivat distros), deoarece implicit ~/.bashrc fișierul începe cu a scurtcircuit, Ubuntu 18.04, pt

exemplu:

# Dacă nu rulați interactiv, nu faceți nimic
cazul $- in
    *i*) ;;
      *) întoarcere;;
esac

...Asta va opri evaluarea fișierului dacă rulează într-un shell non-interactiv, care este cazul scriptului dvs. din toate acestea scripturile sunt rulate într-un shell non-interactiv și, ulterior, fiecare fișierul sursă va moșteni această proprietate.

si totul a mers bine.Se pare că scripturile rulează în modul non-interactiv, aprovizionare bashrc nu are niciun efect din cauza unei verificări la începutul bashrc (cel puțin în distribuțiile bazate pe Ubuntu). prin urmare, folosind eval, putem ocoli acest lucru.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.