คำถามติดแท็ก bash

คำถามเฉพาะของ Bourne อีกครั้งของเชลล์ใน GNU เมื่อเทียบกับเชลล์ Bourne / POSIX อื่น ๆ สำหรับคำถามเกี่ยวกับเชลล์ Unix โดยทั่วไปให้ใช้ / เชลล์แท็กแทน

11
วิธีเพิ่มเส้นทางไปยัง PATH อย่างถูกต้องได้อย่างไร
ฉันสงสัยว่าจะต้องเพิ่มพา ธ ใหม่ในPATHตัวแปรสภาพแวดล้อมที่ไหน ฉันรู้ว่านี่สามารถทำได้โดยการแก้ไข.bashrc(ตัวอย่าง) แต่ยังไม่ชัดเจนว่าจะทำอย่างไร ทางนี้: export PATH=~/opt/bin:$PATH หรือสิ่งนี้ export PATH=$PATH:~/opt/bin

20
เก็บรักษาประวัติทุบตีในหน้าต่างเทอร์มินัลหลายบาน
ฉันเปิดเทอร์มินัลมากกว่าหนึ่งอย่างสม่ำเสมอ ทุกสองถึงสิบทำสิ่งต่าง ๆ และบ็อบ ตอนนี้สมมติว่าฉันรีสตาร์ทและเปิดเทอร์มินัลชุดอื่น บางคนจำบางสิ่งบางอย่างบางคนลืม ฉันต้องการประวัติที่: จดจำทุกสิ่งจากทุกสถานี สามารถเข้าถึงได้จากทุกเทอร์มินัล (เช่นถ้าฉันlsเป็นหนึ่งให้เปลี่ยนไปที่เทอร์มินัลที่ทำงานอยู่แล้วจากนั้นกดขึ้นlsแสดงขึ้น) อย่าลืมคำสั่งหากมีช่องว่างที่ด้านหน้าของคำสั่ง ฉันสามารถทำอะไรเพื่อให้ทุบตีทำงานได้มากกว่านี้

4
จะวนรอบผ่าน reverse-i-search ใน BASH อย่างไร
ในเทอร์มินัลฉันสามารถพิมพ์CTRL-Rเพื่อค้นหาคำสั่งที่ตรงกันที่พิมพ์ไว้ก่อนหน้านี้ใน BASH เช่นถ้าฉันพิมพ์CTRL-Rแล้วgrepจะแสดงรายการgrepคำสั่งสุดท้ายของฉันและฉันสามารถกด Enter เพื่อใช้งานได้ สิ่งนี้ให้ข้อเสนอแนะเพียงข้อเดียวเท่านั้น มีวิธีใดบ้างที่จะหมุนเวียนคำสั่งการจับคู่ที่พิมพ์ก่อนหน้านี้
443 bash 

3
การใช้“ $ {a: -b}” สำหรับการกำหนดตัวแปรในสคริปต์
ฉันดูสคริปต์บางตัวที่คนอื่นเขียน (โดยเฉพาะ Red Hat) และตัวแปรจำนวนมากถูกกำหนดโดยใช้สัญกรณ์ต่อไปนี้ VARIABLE1="${VARIABLE1:-some_val}" หรือบางตัวขยายตัวแปรอื่น ๆ VARIABLE2="${VARIABLE2:-`echo $VARIABLE1`}" จุดประสงค์ของการใช้สัญลักษณ์นี้แทนที่จะประกาศเพียงค่าโดยตรงVARIABLE1=some_valคืออะไร? มีประโยชน์กับสัญกรณ์นี้หรือข้อผิดพลาดที่เป็นไปได้ที่จะป้องกัน? ที่ไม่:-ได้มีความหมายเฉพาะในบริบทนี้?


14
ใน Bash เมื่อนามแฝงเมื่อสคริปต์และเมื่อใดที่จะเขียนฟังก์ชั่น?
ฉันใช้งาน Linux มาเกือบ 10 ปีแล้วเพื่อถามคำถามนี้ มันเป็นการทดลองและข้อผิดพลาดทั้งหมดและการท่องอินเทอร์เน็ตแบบดึกดื่น แต่ผู้คนไม่ควรต้องการ 10 ปีสำหรับเรื่องนี้ ถ้าฉันเพิ่งเริ่มต้นด้วย Linux ฉันต้องการทราบว่าเมื่อใดจะใช้นามแฝงเวลาเขียนสคริปต์และเมื่อใดควรเขียนฟังก์ชัน ฉันใช้นามแฝงสำหรับการดำเนินการที่ง่ายมากที่ไม่มีข้อโต้แย้ง alias houston='cd /home/username/.scripts/' ดูเหมือนว่าชัดเจน แต่บางคนทำสิ่งนี้: alias command="bash bashscriptname" (และเพิ่มลงใน.bashrcไฟล์) มีเหตุผลที่ดีที่จะทำเช่นนั้น? ฉันพยายามอย่างหนักจริง ๆ แต่ฉันไม่สามารถนึกถึงสถานการณ์ใด ๆ ที่ฉันต้องการจะทำอย่างแท้จริง ดังนั้นหากมีกรณีขอบที่จะสร้างความแตกต่างโปรดตอบด้านล่าง เพราะนั่นคือสิ่งที่ฉันจะใส่บางสิ่งใน PATH ของฉันchmod +xซึ่งเป็นอีกสิ่งหนึ่งที่เกิดขึ้นหลังจากการทดลองและข้อผิดพลาดของ Linux มาหลายปี ซึ่งนำฉันไปยังหัวข้อถัดไป ตัวอย่างเช่นฉันเพิ่มโฟลเดอร์ที่ซ่อนอยู่ ( .scripts/) ในโฮมไดเร็กตอรี่ไปที่ PATH ของฉันโดยเพิ่มบรรทัดลงใน.bashrc( PATH=$PATH:/home/username/.scripts/) ของฉันดังนั้นสิ่งใดที่ปฏิบัติการได้ในการเติมข้อความอัตโนมัติโดยอัตโนมัติ ถ้าฉันต้องการ ฉันไม่ต้องการสิ่งนั้นจริง ๆ ใช่ไหม? ฉันจะใช้เฉพาะสำหรับภาษาที่ไม่ใช่เปลือกเช่น Python …

14
วิธีรับเวลาประมวลผลของสคริปต์อย่างมีประสิทธิภาพ
ฉันต้องการที่จะแสดงเวลาที่เสร็จสมบูรณ์ของสคริปต์ สิ่งที่ฉันทำในปัจจุบันคือ - #!/bin/bash date ## echo the date at start # the script contents date ## echo the date at end นี่เป็นเพียงการแสดงเวลาเริ่มต้นและสิ้นสุดของสคริปต์ เป็นไปได้ไหมที่จะแสดงเอาต์พุตแบบละเอียดเช่นเวลาตัวประมวลผล / เวลา io เป็นต้น
340 bash  profiling 

5
ทำไมเชลล์สคริปต์ของฉันถึงสำลักในช่องว่างหรืออักขระพิเศษอื่น ๆ
หรือคู่มือแนะนำการจัดการชื่อไฟล์ที่มีประสิทธิภาพและการส่งผ่านสตริงอื่น ๆ ในเชลล์สคริปต์ ฉันเขียนเชลล์สคริปต์ซึ่งทำงานได้ดีเกือบตลอดเวลา แต่มันฉายาบางอินพุต (เช่นชื่อไฟล์บางชื่อ) ฉันพบปัญหาเช่นต่อไปนี้: ฉันมีชื่อไฟล์ที่มีพื้นที่hello worldและมันก็ถือว่าเป็นสองไฟล์แยกต่างหากและhelloworld ฉันมีสายอินพุตพร้อมช่องว่างสองช่องติดต่อกัน ช่องว่างนำหน้าและต่อท้ายหายไปจากบรรทัดอินพุต บางครั้งเมื่ออินพุตมีอักขระหนึ่งตัวอักขระ\[*?เหล่านั้นจะถูกแทนที่ด้วยข้อความบางส่วนซึ่งเป็นชื่อไฟล์จริง มีเครื่องหมายอะโพสโทรฟี'(หรือเครื่องหมายคำพูดคู่") ในอินพุตและสิ่งต่าง ๆ แปลกประหลาดหลังจากจุดนั้น มีแบ็กสแลชในอินพุต (หรือ: ฉันใช้ Cygwin และชื่อไฟล์บางส่วนของฉันมี\ตัวคั่นสไตล์ Windows ) เกิดอะไรขึ้นและฉันจะแก้ไขได้อย่างไร



21
การทำให้เทอร์มินัลและสภาวะแวดล้อมเชลล์ของคุณเป็นสี?
ฉันใช้เวลาส่วนใหญ่ทำงานกับสภาพแวดล้อม Unix และใช้โปรแกรมจำลองเทอร์มินัล ฉันพยายามใช้สีบนบรรทัดคำสั่งเนื่องจากสีทำให้การแสดงผลมีประโยชน์และใช้งานง่ายขึ้น มีตัวเลือกอะไรบ้างเพื่อเพิ่มสีให้กับสภาพแวดล้อมของเทอร์มินัล เทคนิคอะไรที่คุณใช้ คุณพบข้อผิดพลาดอะไรบ้าง น่าเสียดายที่การรองรับสีอาจแตกต่างกันไปตามประเภทของเทอร์มินัลการตั้งค่า TERM ยูทิลิตี้การใช้งานบั๊กกี้ ฯลฯ นี่คือเคล็ดลับบางอย่างจากการตั้งค่าของฉันหลังจากการทดลองมากมาย: ฉันมักจะตั้งค่าTERM=xterm-colorซึ่งได้รับการสนับสนุนในโฮสต์ส่วนใหญ่ (แต่ไม่ทั้งหมด) ฉันทำงานกับโฮสต์ที่แตกต่างกันหลายเวอร์ชันระบบปฏิบัติการที่แตกต่างกัน ฯลฯ ฉันใช้ทุกอย่างจาก macOS X, Ubuntu Linux, RHEL / CentOS / Scientific Linux และ FreeBSD ฉันพยายามทำให้สิ่งต่าง ๆ เรียบง่ายและเป็นสามัญถ้าเป็นไปได้ ฉันทำงานกลุ่มโดยใช้ GNU screenซึ่งเพิ่มความสนุกอีกชั้น ระบบปฏิบัติการจำนวนมากตั้งค่าสิ่งต่าง ๆ เช่นdircolorsและโดยค่าเริ่มต้นและฉันไม่ต้องการแก้ไขสิ่งนี้บนโฮสต์ที่แตกต่างกันหลายร้อยแห่ง ดังนั้นฉันจึงพยายามที่จะยึดติดกับค่าเริ่มต้น ฉันปรับแต่งค่าสีของเทอร์มินัลแทน ใช้สีสำหรับบางคำสั่ง Unix ( ls, grep, less, vim) และพรอมต์ทุบตี คำสั่งเหล่านี้ดูเหมือนจะใช้ " …
262 shell  bash  colors  prompt 

4
ฉันจะล้างแคชของเส้นทางของ Bash ไปยัง executables ได้อย่างไร
เมื่อฉันรันโปรแกรมโดยไม่ระบุพา ธ เต็มไปยังไฟล์ที่เรียกทำงานได้และ Bash ต้องค้นหาไดเรกทอรีใน$PATHเพื่อค้นหาไบนารีดูเหมือนว่า Bash จะจดจำเส้นทางในแคชบางประเภท ตัวอย่างเช่นฉันติดตั้งบิลด์การโค่นล้มจากแหล่งไปยัง/usr/localแล้วพิมพ์svnsync helpที่พรอมต์ Bash Bash หาตำแหน่งไบนารี/usr/local/bin/svnsyncสำหรับ "svnsync" และดำเนินการ จากนั้นเมื่อฉันลบการติดตั้ง Subversion ใน/usr/localและรันsvnsync helpใหม่ Bash ตอบกลับ: bash: /usr/local/bin/svnsync: No such file or directory /usr/bin/svnsyncแต่เมื่อฉันเริ่มตัวอย่างใหม่ของทุบตีพบและรัน ฉันจะล้างแคชของพา ธ ไปยังไฟล์ที่เรียกทำงานได้อย่างไร
256 bash  executable  cache 

9
จะทำให้ colorize output ของ git เป็นอย่างไร?
มีวิธีการออกสีสำหรับ git (หรือคำสั่งใด ๆ )? พิจารณา: baller@Laptop:~/rails/spunky-monkey$ git status # On branch new-message-types # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: app/models/message_type.rb # no changes added …
255 bash  colors  git 

4
วิธีรับ pid ของคำสั่งที่ดำเนินการครั้งสุดท้ายในเชลล์สคริปต์?
ฉันต้องการมีเชลล์สคริปต์เช่นนี้: my-app & echo $my-app-pid แต่ฉันไม่ทราบวิธีการรับ pid ของคำสั่งที่ดำเนินการเพียง ฉันรู้ว่าฉันสามารถใช้jobs -p my-appคำสั่งเพื่อ grep pid แต่ถ้าฉันต้องการรันเชลล์หลาย ๆ ครั้งวิธีนี้จะไม่ทำงาน เพราะjobspecไม่ชัดเจน

12
ฉันจะวนซ้ำไดเรกทอรีต่างๆใน bash ได้อย่างไร
ฉันมีโฟลเดอร์ที่มีไดเรกทอรีและไฟล์บางไฟล์ (บางไฟล์ถูกซ่อนอยู่เริ่มต้นด้วยจุด) for d in *; do echo $d done จะวนซ้ำไฟล์ทั้งหมด แต่ฉันต้องการวนซ้ำผ่านไดเรกทอรีเท่านั้น ฉันจะทำอย่างไร
249 bash  files  directory 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.