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

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

3
ใช้ตัวแปรเพื่อจัดเก็บรหัสสีของเทอร์มินัลสำหรับ PS1 หรือไม่
ในของ.bashrcฉันฉันใช้รหัสสีเทอร์มินัล ANSI เพื่อ colorize บิตต่าง ๆ ดูเหมือนว่านี้: PS1='\u@\h:\w\[\033[33m\]$(virtual_env)\[\033[32m\]$(git_branch)\[\033[0m\]$ ' ที่ไหนvirtual_envและgit_branchฟังก์ชั่นทุบตีสิ่งที่ส่งออกใน stdout ตอนนี้เพื่อให้ง่ายต่อการอ่านและแก้ไข, PS1ฉันต้องการที่จะเก็บรหัสสีในตัวแปรและหมายถึงพวกเขาแทนการฝังพวกเขาโดยตรงใน ดังนั้นฉันจึงมีตัวแปรหลายอย่างเช่นนี้: GREEN="\[\033[32m\]" YELLOW="\[\033[33m\]" RESET="\[\033[0m\]" ฉันต้องการที่จะสามารถเขียนสิ่งที่ชอบ: PS1='\u@\h:\w${YELLOW}$(virtual_env)${GREEN}$(git_branch)${RESET}$ ' แต่วิธีนี้ใช้ไม่ได้ - รหัสสีจะแสดงขึ้นมาในพรอมต์ราวกับว่ามันกำลังหลบหนี สีที่ทำงานอย่างถูกต้องถ้าผมใช้คำพูดสองแทนแต่แล้วก็พรอมต์เพียงการเปลี่ยนแปลงเมื่อฉันทำPS1source ~/.bashrc ฉันได้พยายามสิ่งอื่น ๆ ที่ผมเคยเห็นคนทำ - การใช้printfและไม่ใช้คำพูดเดียวสำหรับสีวาง\[และ\]ในPS1แทนของตัวแปรสี แต่ไม่มีอะไรน่าจะทำงาน ฉันจะใช้ตัวแปรสำหรับรหัสสีได้อย่างไร

2
นามแฝงเทียบกับการส่งออกสำหรับคำสั่งง่ายๆ
สำหรับคำสั่งง่ายๆเช่นlessจะดีกว่าไหมถ้าจะสร้าง alias หรือส่งออกตัวเลือก? มีประโยชน์อย่างใดอย่างหนึ่งมากกว่าอีก? ตัวอย่างเช่นหากฉันต้องการlessใช้-Rตัวเลือกเพื่อแสดงอักขระดิบเสมอโซลูชันทั้งสองนี้ทำงาน: export LESS='-R' alias less='less -R' สำหรับกรณีง่าย ๆ แบบนี้มีประโยชน์อย่างใดอย่างหนึ่งต่ออีกหรือไม่ สถานการณ์ใดที่หนึ่งจะทำให้เกิดปัญหาและอื่น ๆ จะไม่? ผมเคยอ่านผ่านหลายinfoและmanหน้าเช่นเดียวกับ Googling มัน แต่ฉันยังคงติดอยู่กับเรื่องนี้
33 bash  zsh  alias 

3
ทำไมบางคนไม่ควรใช้รหัสผ่านในบรรทัดคำสั่ง
เหตุใดผู้คนจึงกลัวที่จะเขียนรหัสผ่านในบรรทัดคำสั่ง ไฟล์ประวัติอยู่ใน~/.historyดังนั้นจึงใช้ได้เฉพาะกับผู้ใช้ที่ดำเนินการคำสั่ง (และรูท)

9
คำสั่ง Bash ภายใน vi
เป็นไปได้ไหมที่จะพิมพ์คำสั่ง bash ภายใน vi และรับ stdout? ฉันพบว่ามันน่าเบื่อที่จะปิดและเปิดใหม่อีกครั้งเพียงเพราะฉันต้องการค้นหาบางอย่างในเปลือก
33 bash  shell  vim  vi 

5
ไม่พบคำสั่ง Bash Sudo
ฉันได้ตั้งค่า VM โดยใช้ turnkey linux redmine และฉันพยายามที่จะ SSH เข้าสู่เซิร์ฟเวอร์เพื่อติดตั้งบางรายการเพิ่มเติม ดูเหมือนจะไม่รู้จักคำสั่ง sudo ทุกครั้งที่ฉันพยายาม sudo สิ่งที่ฉันได้รับข้อผิดพลาดว่า: -bash: sudo: command not found ฉันอ่านที่อื่นเพื่อพิมพ์ 'whereis sudo' และผลลัพธ์คือ: sudo:
33 bash  sudo 


6
ฉันจะปิดเทอร์มินัลโดยไม่บันทึกประวัติได้อย่างไร
มากกว่าหนึ่งครั้งฉันตั้งใจใช้คำสั่งจำนวนหนึ่งและทำให้ประวัติทุบตีของฉันสกปรก ฉันจะปิดเครื่องโดยไม่บันทึกประวัติทุบตีของฉันได้อย่างไร ฉันใช้ Fedora

7
อ้างถึงไฟล์ภายใต้ไดเรกทอรีเดียวกันของสคริปต์ที่พบใน $ PATH
ฉันมีไฟล์สคริปต์ทุบตีซึ่งอยู่ภายใต้ไดเรกทอรีบางส่วนที่เพิ่มไปยัง $ PATH เพื่อให้ฉันสามารถเรียกใช้สคริปต์จากไดเรกทอรีใด ๆ มีไฟล์ข้อความอื่นภายใต้ไดเรกทอรีเดียวกันกับสคริปต์ ฉันสงสัยว่าจะอ้างถึงไฟล์ข้อความในสคริปต์ได้อย่างไร ตัวอย่างเช่นหากสคริปต์เป็นเพียงการส่งออกเนื้อหาของไฟล์ข้อความcat textfileจะไม่ทำงานเนื่องจากเมื่อเรียกสคริปต์จากไดเรกทอรีอื่นไฟล์ข้อความจะไม่พบ
33 bash  path 


2
ความแตกต่างระหว่าง“ ไม่พบคำสั่ง” และ“ ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว”?
ตัวอย่างเช่น: $ node -bash: /usr/local/bin/node: No such file or directory $ foo -bash: foo: command not found ความแตกต่างคืออะไร? ในทั้งสองกรณีnodeและfooเป็นคำสั่งที่ไม่ถูกต้อง แต่ดูเหมือนว่า Unix จะไม่พบnodeไบนารี เมื่อถอนการติดตั้งโปรแกรมเช่นnodeมีวิธีล้างข้อมูลนี้เพื่อให้ได้รับหรือไม่ $ node -bash: node: command not found แก้ไข: ผลลัพธ์จากtypeคำสั่ง: $ type node node is hashed (/usr/local/bin/node) $ type foo -bash: type: foo: not found

5
ค้นหาข้อความบนเอาต์พุตเทอร์มินัล
ฉันใช้งานแอพพลิเคชั่นที่มีคำสั่ง$ grails run-appที่จะพิมพ์เข้าสู่ระบบเทอร์มินัลเหมือนด้านล่าง สิ่งที่ฉันต้องการคือค้นหาข้อความเฉพาะ (พูดuser authorities) ในบันทึกนี้เพื่อให้ฉันสามารถตรวจสอบเพิ่มเติมได้ วิธีหนึ่งในการใช้ Logging Apis เพื่อเขียนไฟล์ข้อความ แต่ฉันต้องการค้นหาในเทอร์มินัลในขณะนี้ ฉันพบคำถามที่คล้ายกันเกี่ยวกับวิธีค้นหาข้อความบนเทอร์มินัลโดยตรงซึ่งแนะนำscreenคำสั่ง แต่ฉันไม่รู้ว่าscreenทำงานอย่างไรในกรณีนี้ ฉันพยายาม $ screen grails run-app แต่ไม่สามารถเดินหน้าต่อไปได้ ฉันสามารถดูรายการหน้าจอด้วย prayag@prayag:~/zlab/nioc2egdelonk$ screen -list There is a screen on: 8076.pts-2.prayag (10/06/2013 12:13:25 PM) (Attached) 1 Socket in /var/run/screen/S-prayag.

4
ฉันจะใช้ตัวแปร $ ในการขยายเชลล์ของลำดับได้อย่างไร
ฉันต้องการที่จะใช้$var inการขยายตัวของเปลือกหอยกับช่วงในทุบตี แค่วาง{$var1..$var2}ไม่ได้ดังนั้นฉันจึงไป "ด้านข้าง" ... ผลงานต่อไปนี้ แต่มันเป็น kludge เล็กน้อย # remove the split files echo rm foo.{$ext0..$extN} rm-segments > rm-segments source rm-segments มีวิธี "ปกติ" มากกว่านี้ไหม?

8
การคว้าส่วนขยายในชื่อไฟล์
ฉันจะรับนามสกุลไฟล์จาก bash ได้อย่างไร นี่คือสิ่งที่ฉันพยายาม: filename=`basename $filepath` fileext=${filename##*.} โดยการทำที่ฉันจะได้รับการขยายตัวของbz2จากเส้นทางแต่ฉันมีปัญหากับเส้นทาง/dir/subdir/file.bz2/dir/subdir/file-1.0.tar.bz2 ฉันต้องการโซลูชันที่ใช้ bash เท่านั้นโดยไม่มีโปรแกรมภายนอกถ้าเป็นไปได้ extract path_to_fileเพื่อให้คำถามของฉันล้างผมก็สร้างสคริปต์ทุบตีเพื่อแยกเก็บใดก็ตามเพียงแค่คำสั่งเดียวของ วิธีการแตกไฟล์จะถูกกำหนดโดยสคริปต์โดยดูประเภทการบีบอัดหรือการเก็บถาวรซึ่งอาจเป็น. tar.gz, .gz, .bz2 เป็นต้นฉันคิดว่านี่ควรเกี่ยวข้องกับการจัดการสตริงตัวอย่างเช่นถ้าฉันได้รับการขยาย.gzแล้ว ควรตรวจสอบว่ามันมีสตริง.tarก่อน.gz- .tar.gzถ้าเป็นเช่นนั้นส่วนขยายที่ควรจะเป็น
33 bash  shell  filenames 

6
จะค้นหาไฟล์ที่กำหนดฟังก์ชั่น bash ได้อย่างไร?
ฉันไม่สามารถหาวิธีค้นหาไฟล์ที่กำหนดฟังก์ชั่น bash ( __git_ps1ในกรณีของฉัน) ผมทดลองกับdeclare, type, whichแต่ไม่มีอะไรบอกฉันแฟ้มแหล่งที่มา ฉันอ่านบางแห่งที่declareสามารถพิมพ์ชื่อไฟล์และหมายเลขบรรทัดได้ แต่ก็ไม่ได้อธิบายว่าอย่างไร helpหน้าdeclareไม่ได้บอกว่ามันทั้ง ฉันจะรับข้อมูลนี้ได้อย่างไร?
33 bash 

4
ทุบตีรายการไฟล์วนซ้ำยกเว้นเมื่อว่างเปล่า
ฉันคิดว่ามันจะง่าย - แต่มันพิสูจน์ได้ซับซ้อนกว่าที่ฉันคาดไว้ ฉันต้องการวนซ้ำไฟล์ทั้งหมดของชนิดเฉพาะในไดเรกทอรีดังนั้นฉันจึงเขียนสิ่งนี้: #!/bin/bash for fname in *.zip ; do echo current file is ${fname} done ทำงานได้ตราบใดที่มีไฟล์ที่ตรงกันอย่างน้อยหนึ่งไฟล์ในไดเรกทอรี อย่างไรก็ตามหากไม่มีไฟล์ที่ตรงกันฉันจะได้รับสิ่งนี้: current file is *.zip ฉันลองแล้ว: #!/bin/bash FILES=`ls *.zip` for fname in "${FILES}" ; do echo current file is ${fname} done ในขณะที่เนื้อความของลูปไม่ทำงานเมื่อไม่มีไฟล์ฉันได้รับข้อผิดพลาดจาก ls: ls: *.zip: No such file or directory ฉันจะเขียนลูปที่จัดการไม่มีไฟล์ที่ตรงกันได้อย่างหมดจดได้อย่างไร
33 bash  parameter 

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