Score:0

ฉันจะโหลด bashrc ซ้ำในสคริปต์และไม่ล้มเหลวได้อย่างไร

ธง cl

ฉันได้เขียนสคริปต์ที่ดาวน์โหลดและติดตั้ง anaconda3 และการอ้างอิงอื่น ๆ จากนั้นจะติดตั้งโมดูลหลามสองสามตัวโดยใช้ pip3.
ประเด็นของผมคือ ที่มา ~/.bashrc ดูเหมือนจะไม่ทำงานและด้วยเหตุนี้ pip3ไม่รู้จัก ถ้าฉันใช้ ผู้บริหารทุบตีคำสั่งที่เหลือหลังจากคำสั่งนี้จะไม่ถูกดำเนินการ ฉันควรทำอย่างไรดี? นี่คือสคริปต์ของฉันโดยวิธี:

#!/bin/bash

## สคริปต์ทุบตีสำหรับการตั้งค่าสภาพแวดล้อมการพัฒนา PX4 บน Ubuntu LTS (16.04 ขึ้นไป)
## สามารถใช้สำหรับการติดตั้งโปรแกรมจำลอง (เท่านั้น) หรือสำหรับการติดตั้งเงื่อนไขเบื้องต้นสำหรับ Snapdragon Flight หรือ Raspberry Pi
##
## การติดตั้ง:
## - การพึ่งพาและเครื่องมือทั่วไปสำหรับเป้าหมายทั้งหมด (รวมถึง: Ninja build system, cmake เวอร์ชันล่าสุด, git, anaconda3, pyulog)
## - การพึ่งพาโปรแกรมจำลอง jMAVSim
## - PX4/แหล่งเฟิร์มแวร์ (ถึง ~/src/Firmware/)

# ป้องกันการหมดเวลา sudo https://serverfault.com/a/833888
กับดัก "ทางออก" INT TERM; กับดัก "ฆ่า 0" ออก; sudo -v || ออกจาก $?; นอน 1; ในขณะที่จริง; นอน 60; sudo -nv; เสร็จสิ้น 2>/dev/null &

# การกำหนดค่าอูบุนตู
echo "ลบ modemmanager"
sudo apt-get ลบ modemmanager -y
echo "เพิ่มผู้ใช้ในกลุ่มโทรออกสำหรับการเข้าถึงพอร์ตอนุกรม (ต้องรีบูต)"
sudo usermod -a -G โทรออก $USER

# อัปเดต CMake และ Git
# การติดตั้ง cmake เวอร์ชันล่าสุด (อ้างอิง https://askubuntu.com/questions/355565/#865294 )
echo "กำลังติดตั้ง CMake เวอร์ชันล่าสุด"
อัปเดต sudo apt && \
sudo apt install -y software-properties-common lsb-release && \
sudo apt ทำความสะอาดทั้งหมด
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo ที /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
sudo apt-add-repository "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) หลัก"
อัปเดต sudo apt
sudo apt ติดตั้ง kitware-archive-keyring
sudo rm /etc/apt/trusted.gpg.d/kitware.gpg
อัปเดต sudo apt
sudo apt ติดตั้ง cmake

# การติดตั้ง git เวอร์ชันล่าสุด
echo "กำลังติดตั้ง git เวอร์ชันล่าสุด"
sudo add-apt-repository -y ppa:git-core/ppa
sudo apt-get อัปเดต
sudo apt-get install git -y

#ติดตั้งanaconda3
พิมพ์ conda >/dev/null 2>&1 || { echo >&2 "กำลังติดตั้ง anaconda3 (python 3.8.8)"; wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh; ทุบตี ./Anaconda3-2021.05-Linux-x86_64.sh;}

ที่มา ~/.bashrc
. ~/.bashrc

# การพึ่งพากันทั่วไป
echo "กำลังติดตั้งการพึ่งพาทั่วไป"
sudo apt-get update -y
sudo apt-get install git zip cmake build-essential genromfs ninja-build exiftool astyle -y
# ตรวจสอบให้แน่ใจว่าได้ติดตั้ง xxd แล้ว แพ็คเกจ xxd เฉพาะตั้งแต่ Ubuntu 18.04 แต่ถูกบีบอัดเป็น vim-common มาก่อน
ซึ่ง xxd || sudo apt ติดตั้ง xxd -y || sudo apt-get install vim-common --no-install-recommends -y
# แพ็คเกจหลามที่จำเป็น
pip3 ติดตั้ง argparse empy toml จำนวนมาก
pip3 ติดตั้ง pandas jinja2 pyserial pyyaml
pip3 ติดตั้ง pyulog

# การพึ่งพาโปรแกรมจำลอง jMAVSim
echo "กำลังติดตั้งการพึ่งพาโปรแกรมจำลอง jMAVSim"
sudo apt-get ติดตั้ง ant openjdk-8-jdk openjdk-8-jre -y

Hossein avatar
cl flag
ขอบคุณ แต่ดูเหมือนว่าจะไม่ทำให้เกิดปัญหาใดๆ เนื่องจากดาวน์โหลดและติดตั้งได้ดี (แม้ว่าฉันจะแก้ไขให้แล้วก็ตาม ขอบคุณ) การจัดหาสองครั้งอยู่ที่นั่นเนื่องจากการจัดหาครั้งเดียวไม่ได้ทำอะไรเลย พวกเขาสองคนก็ทำอะไรไม่ได้เช่นกัน
Score:0
ธง cl

ฉันต้องใช้ อีวาล แหล่งที่มา ~/.bashrc เรียบร้อยแล้ว ฉันทำอย่างนี้ :

eval "$(cat ~/.bashrc | หาง -n +10)"

อ้างจาก ที่นี่:

ลักษณะการทำงานนี้เฉพาะกับ Ubuntu (และอาจได้รับมามากที่สุด distros) เนื่องจากค่าเริ่มต้นของคุณ ~/.bashrc ไฟล์ขึ้นต้นด้วย a ลัดวงจร Ubuntu 18.04 สำหรับ

ตัวอย่าง:

#ถ้าไม่โต้ตอบก็อย่าทำอะไรเลย
กรณี $- ใน
    *ผม*) ;;
      *) กลับ;;
เอสแซค

... นั่นจะหยุดการประเมินไฟล์หากทำงานในไฟล์ non-interactive shell ซึ่งเป็นกรณีของสคริปต์ของคุณตั้งแต่ทั้งหมด สคริปต์ถูกเรียกใช้ในเชลล์ที่ไม่มีการโต้ตอบ และหลังจากนั้นทุกๆ ไฟล์ที่คุณมาจะสืบทอดคุณสมบัตินี้

และทุกอย่างก็ปกติดีดูเหมือนว่าเนื่องจากสคริปต์ทำงานในโหมดไม่โต้ตอบ การจัดหา ทุบตี ไม่มีผลกระทบใด ๆ เนื่องจากการตรวจสอบที่จุดเริ่มต้นของ bashrc (อย่างน้อยใน distros ที่ใช้ Ubuntu) ดังนั้นการใช้ eval เราสามารถหลีกเลี่ยงสิ่งนี้ได้

Score:0
ธง in

ลองเรียกใช้รหัสต่อไปนี้หลังจาก ที่มา ~/.bashrcซึ่งทำให้ Bash ลืมเส้นทางแบบเต็มที่จำได้ทั้งหมด:

$ แฮช -r

จากคู่มือทุบตี:

แฮช [-r] [-p ชื่อไฟล์] [-dt] [ชื่อ]

ทุกครั้งที่เรียกใช้แฮช ระบบจะจำชื่อพาธแบบเต็มของคำสั่งที่ระบุเป็นอาร์กิวเมนต์ชื่อ ดังนั้นจึงไม่จำเป็นต้องค้นหาในการเรียกใช้ครั้งต่อไป [...] -r ตัวเลือกทำให้เชลล์ลืมตำแหน่งที่จำได้ทั้งหมด

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา