Score:0

Bash: กำหนดฟังก์ชันใน bashrc ที่สคริปต์ทั่วโลกสามารถใช้ได้

ธง kp

ฉันชอบที่จะกำหนดฟังก์ชั่นใน ~/.bashrc และใช้ในสคริปต์ต่าง ๆ ทั้งทาง ส่งออก -f หรือ ที่มา .bashrc.

ฟังก์ชั่น:

นาโน ~/.bashrc

ฟังก์ชัน test_func() {
    yt-dlp -f '299+140' --merge-output-format mp4 -cia List.txt;
}

ส่งออก -f test_func

สคริปต์:

#!/bin/bash

cd /home/admn/ดาวน์โหลด/YT_DL;

test_func --autonumber-start 101 -o '%(autonumber)1d_%(ชื่อ)s.%(ext)s';

ปัญหา-1:

หลังจาก test_funcส่วนที่เหลือของคำสั่ง --autonumber-เริ่ม 101 -o '%(autonumber)1d_%(title)s.%(ext)s' ไม่ทำงานเลย



ปัญหา-2:

ก่อนหน้านี้เมื่อฉันลองใช้ ที่มา .bashrc ในสคริปต์ของฉัน ฉันได้รับข้อผิดพลาดเหล่านี้:

/usr/local/scripts/test.sh: บรรทัดที่ 3: .bashrc: ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว
/usr/local/scripts/test.sh: บรรทัด 12: test_func: ไม่พบคำสั่ง

ฟังก์ชัน (ไม่มี ส่งออก -f):

นาโน ~/.bashrc

ฟังก์ชัน test_func() {
    yt-dlp -f '299+140' --merge-output-format mp4 -cia List.txt;
}

สคริปต์ (ด้วย ที่มา .bashrc):

#!/bin/bash

ที่มา .bashrc

cd /home/admn/ดาวน์โหลด/YT_DL;

test_func --autonumber-start 101 -o '%(autonumber)1d_%(ชื่อ)s.%(ext)s';

แก้ไข-1:

$ bash -xv /usr/local/scripts/test.sh
#!/bin/bash

แหล่งที่มา /home/admn/.bashrc
+ แหล่งที่มา /home/admn/.bashrc
# ~/.bashrc: ดำเนินการโดย bash(1) สำหรับเชลล์ที่ไม่ได้เข้าสู่ระบบ
# ดู /usr/share/doc/bash/examples/startup-files (ในแพ็คเกจ bash-doc)
# ตัวอย่าง

# นามแฝง pip='pip3.7'
นามแฝงหลาม = 'python3'
++ นามแฝง python=python3

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

test_func --autonumber-start 101 -o '%(autonumber)1d_%(ชื่อ)s.%(ext)s';
+ test_func --autonumber-start 101 -o '%(autonumber)1d_%(ชื่อ)s.%(ext)s'
/usr/local/scripts/test.sh: บรรทัดที่ 5: test_func: ไม่พบคำสั่ง
$ 

นี่คือหัวข้อบางส่วนที่ฉันได้ผ่านไป และแม้ว่าฉันจะมีความคิดบางอย่าง แต่ก็ยังไม่สามารถหาทางออกสำหรับกรณีการใช้งานของฉันได้ ขอบคุณ.

https://unix.stackexchange.com/questions/63665/how-to-define-a-bash-function-that-can-be-used-by-different-scripts

https://stackoverflow.com/questions/6218268/how-to-define-a-bash-function-for-use-in-any-script

https://stackoverflow.com/questions/17219174/variables-set-in-bashrc-and-accessing-them-in-shellscript

https://stackoverflow.com/questions/1500499/how-do-you-call-a-function-defined-in-bashrc-from-the-shell

กำหนดฟังก์ชัน bash ที่ใช้ได้ทั่วโลกเพื่อใช้โดยสคริปต์ใดๆ

ระบบปฏิบัติการ: Ubuntu MATE 21.04

ทุบตี: 5.1.4(1)-release (x86_64-pc-linux-gnu)

Score:3
ธง tm

หากคุณต้องการให้ฟังก์ชันใช้พารามิเตอร์ คุณต้องระบุให้ชัดเจน

ฟังก์ชัน test_func() {
    yt-dlp "$@" -f '299+140' --merge-output-format mp4 -cia List.txt
    #~~~~
}

"$@" ย่อมาจาก "พารามิเตอร์ทั้งหมด" คุณยังสามารถใช้พารามิเตอร์ตำแหน่งเช่น "$1", "$2"ฯลฯ

หากคุณจัดหาไฟล์จากไดเร็กทอรีอื่น คุณต้องระบุพาธแบบเต็มหรือระบุพาธของไฟล์ใน $เส้นทาง.

ที่มา ~/.bashrc
# หรือ
เส้นทาง+=:~
ที่มา .bashrc

หลังการอัปเดต: ของคุณ .bashrc ประกอบด้วย กลับ ที่หยุดการประมวลผล .bashrc หากไม่ได้ทำงานในเชลล์แบบโต้ตอบ ใส่การประกาศฟังก์ชันไว้ที่ใดที่หนึ่งก่อนเงื่อนไข หากคุณต้องการเรียกใช้งานในเชลล์ที่ไม่ใช่แบบโต้ตอบเช่นกัน

tm flag
ลองรันสคริปต์ของคุณภายใต้ `set -xv` เพื่อดูว่าคำสั่งใดกำลังรันอยู่
tm flag
`return` ออกจาก `.bashrc` ก่อนที่จะไปถึงการประกาศฟังก์ชัน
tm flag
`.bashrc` ของคุณมี `return` ที่หยุดการประมวลผล `.bashrc` หากไม่ได้ทำงานในเชลล์แบบโต้ตอบ วางการประกาศฟังก์ชันไว้ที่ใดที่หนึ่งก่อนเงื่อนไข หากคุณต้องการเรียกใช้งานในเชลล์ที่ไม่ใช่แบบโต้ตอบเช่นกัน
Jags avatar
kp flag
ฟังก์ชั่นการโพสต์ก่อนที่เงื่อนไข `return` จะแก้ไขได้ ดังนั้น ส่วนนี้ `# ถ้าไม่ทำงานแบบโต้ตอบ ไม่ต้องทำอะไร | กรณี $- ใน | *ผม*) ;; | *) กลับ;; | esac` ต้องไปต่อท้ายไฟล์ `.bashrc` หรือไม่ ขอบคุณมาก.
Jags avatar
kp flag
สุดท้าย มีวิธี "ที่ต้องการ / มาตรฐาน / ดีกว่า" ในการเรียกใช้ฟังก์ชันจาก `.bashrc` หรือไม่ ฉันหมายถึง `export -f` vs `source ~/.bashrc` ขอบคุณ
tm flag
ส่วน "ผลตอบแทน" ควรอยู่ก่อนสิ่งที่คุณต้องการในเชลล์แบบโต้ตอบ แต่ไม่ต้องการในส่วนที่ไม่ใช่แบบโต้ตอบ
tm flag
ฉันไม่ใช่ผู้เชี่ยวชาญ แต่ฉันชอบ "แหล่งที่มา" มากกว่า "ส่งออก"
Jags avatar
kp flag
นั่นคือสิ่งที่ฉันอ่านในไม่กี่แห่งเช่นกันว่า `แหล่งที่มา' เป็นที่ต้องการ / ดีกว่า ขอบคุณมาก :)

โพสต์คำตอบ

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