Điểm:0

Làm cách nào tôi có thể tải lại bashrc trong tập lệnh và không bị lỗi?

lá cờ cl

Tôi đã viết một tập lệnh tải xuống và cài đặt anaconda3 và một số phần phụ thuộc khác, sau đó nó cài đặt một vài mô-đun python bằng cách sử dụng ống3.
Vấn đề là tôi nguồn ~/.bashrc dường như không hoạt động, và do đó ống3's không được công nhận. nếu tôi sử dụng điều hành bash, các lệnh còn lại sau lệnh này không được thực hiện. Tôi nên làm gì? Đây là kịch bản của tôi bằng cách này:

#!/bin/bash

## Tập lệnh Bash để thiết lập môi trường phát triển PX4 trên Ubuntu LTS (16.04 trở lên).
## Nó có thể được sử dụng để cài đặt trình giả lập (chỉ) hoặc để cài đặt các điều kiện tiên quyết cho Snapdragon Flight hoặc Raspberry Pi.
##
## Lượt cài đặt:
## - Các phụ thuộc và công cụ phổ biến cho tất cả các mục tiêu (bao gồm: hệ thống xây dựng Ninja, phiên bản mới nhất của cmake, git, anaconda3, pyulog)
## - phụ thuộc trình giả lập jMAVSim
## - Nguồn PX4/Phần sụn (đến ~/src/Phần sụn/)

# Ngăn chặn thời gian chờ sudo https://serverfault.com/a/833888
bẫy "thoát" INT TERM; bẫy "giết 0" THOÁT; sudo -v || thoát $?; ngủ 1; trong khi đúng; ngủ 60; sudo -nv; xong 2>/dev/null &

# Cấu hình Ubuntu
echo "Xóa modemmanager"
Sudo apt-get remove modemmanager -y
echo "Thêm người dùng vào nhóm quay số để truy cập cổng nối tiếp (yêu cầu khởi động lại)"
sudo usermod -a -G dialout $USER

# Cập nhật CMake và Git
# Cài đặt phiên bản mới nhất của cmake (tham khảo https://askubuntu.com/questions/355565/#865294 )
echo "Cài đặt phiên bản CMake mới nhất"
sudo cập nhật apt && \
sudo apt install -y software-properties-common lsb-release && \
sudo apt làm sạch tất cả
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"
cập nhật sudo apt
Sudo apt cài đặt kitware-archive-keyring
Sudo rm /etc/apt/trusted.gpg.d/kitware.gpg
cập nhật sudo apt
Sudo apt cài đặt cmake

# Cài đặt phiên bản git mới nhất
echo "Cài đặt phiên bản mới nhất của git"
Sudo add-apt-repository -y ppa:git-core/ppa
sudo apt-get cập nhật
sudo apt-get cài đặt git -y

# Cài đặt anaconda3
gõ conda >/dev/null 2>&1 || { echo >&2 "Cài đặt 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;}

nguồn ~/.bashrc
. ~/.bashrc

# Phụ thuộc phổ biến
echo "Cài đặt phụ thuộc chung"
sudo apt-get cập nhật -y
sudo apt-get cài đặt git zip cmake build-essential genromfs ninja-build exiftool astyle -y
# đảm bảo rằng xxd đã được cài đặt, gói xxd chuyên dụng kể từ Ubuntu 18.04 nhưng đã bị nén thành vim-common trước đó
mà xxd || sudo apt cài đặt xxd -y || Sudo apt-get cài đặt vim-common --no-install-recommends -y
# Các gói python bắt buộc
pip3 cài đặt argparse empy toml numpy
pip3 cài đặt pandas jinja2 pyserial pyyaml
cài đặt pip3 pyulog

# phụ thuộc trình giả lập jMAVSim
echo "Cài đặt phụ thuộc giả lập jMAVSim"
sudo apt-get cài đặt ant openjdk-8-jdk openjdk-8-jre -y

Hossein avatar
lá cờ cl
Cảm ơn, nhưng có vẻ như nó không gây ra bất kỳ sự cố nào, vì nó tải xuống và cài đặt tốt (mặc dù tôi đã sửa nó rồi nhờ bạn). tìm nguồn kép chỉ ở đó vì việc tìm nguồn một lần không làm được gì cả. hai người họ cũng không làm được gì cả.
Điểm:0
lá cờ in

Hãy thử chạy đoạn mã sau sau nguồn ~/.bashrc, khiến Bash quên tất cả các đường dẫn đầy đủ đã ghi nhớ:

$ băm -r

Từ hướng dẫn sử dụng Bash:

băm [-r] [-p tên tệp] [-dt] [tên]

Mỗi lần hàm băm được gọi, nó sẽ nhớ tên đường dẫn đầy đủ của các lệnh được chỉ định làm đối số tên, vì vậy chúng không cần phải tìm kiếm trong các lần gọi tiếp theo. [...] Tùy chọn -r khiến trình bao quên tất cả các vị trí đã ghi nhớ.

Điểm:0
lá cờ cl

tôi đã phải sử dụng đánh giá đến nguồn ~/.bashrc thành công. Tôi đã làm điều này:

eval "$(cat ~/.bashrc | đuôi -n +10)"

trích dẫn từ đây:

Hành vi này dành riêng cho Ubuntu (và có lẽ hầu hết có nguồn gốc từ distro), vì mặc định của bạn ~/.bashrc tệp bắt đầu bằng một đoản mạch, Ubuntu 18.04, cho

ví dụ:

# Nếu không chạy tương tác thì đừng làm gì
trường hợp $- trong
    *tôi*) ;;
      *) trở lại;;
thoát hiểm

...Điều đó sẽ dừng việc đánh giá tệp nếu nó đang chạy trong một shell không tương tác, đó là trường hợp của tập lệnh của bạn vì tất cả các tập lệnh được chạy trong trình bao không tương tác và sau đó mọi tệp bạn nguồn sẽ kế thừa thuộc tính này.

và tất cả đã diễn ra tốt đẹp.Có vẻ như vì các tập lệnh chạy ở chế độ không tương tác, tìm nguồn cung ứng bashrc không có bất kỳ ảnh hưởng nào vì đã kiểm tra khi bắt đầu bashrc (ít nhất là trong các bản phân phối dựa trên Ubuntu). do đó, sử dụng eval, chúng ta có thể phá vỡ điều này.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.