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

สำหรับคำถามเกี่ยวกับสคริปต์ที่เขียนขึ้นสำหรับเชลล์คำสั่ง Bash สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาด / ข้อผิดพลาดทางไวยากรณ์โปรดตรวจสอบด้วยโปรแกรม shellcheck (หรือในเซิร์ฟเวอร์ shellcheck เว็บที่ https://shellcheck.net) ก่อนโพสต์ที่นี่ คำถามเกี่ยวกับการใช้งานอินเทอร์แอคทีฟของ Bash นั้นมีแนวโน้มที่จะอยู่ในหัวข้อของผู้ใช้ขั้นสูงมากกว่าในสแต็คโอเวอร์โฟลว์

6
วิธีทำให้ zsh ทำงานเป็นเชลล์ล็อกอินบน Mac OS X (ใน iTerm)
เมื่อ zsh ถูกตั้งค่าเป็น login shell บน Mac OS X, เมื่อเริ่มต้นโดย iTerm, zsh ไม่คิดว่ามันถูกเรียกใช้เป็นเชลล์การเข้าสู่ระบบ, แม้ว่ามันจะเริ่มต้นเป็น '-zsh' ('-' ถูกใส่เป็น อักขระตัวแรกของ arg [0]) ซึ่งควรจะหมายความว่ามันควรจะเริ่มเป็นเชลล์ล็อกอิน ดังนั้นเมื่อฉันตั้งค่าเปลือกเข้าสู่ระบบเพื่อทุบตีทุบตีตระหนักถึงครั้งแรกนี้ '-' ใน $ 0 และทำงานเป็นเปลือกเข้าสู่ระบบ แต่ zsh ไม่แม้ว่ามันจะดูเหมือนว่าควร มีวิธีทำให้ zsh รู้จัก '-' ใน arg [0] หรือทำให้ iTerm รันเชลล์ด้วยอาร์กิวเมนต์บรรทัดคำสั่ง --login หรือไม่?
149 macos  bash  shell  zsh 

9
จะเงียบเอาต์พุตใน Bash script ได้อย่างไร
ฉันมีโปรแกรมที่ส่งออกไปยัง stdout และต้องการเงียบผลลัพธ์นั้นในสคริปต์ Bash ในขณะที่ไพพ์ไปยังไฟล์ ตัวอย่างเช่นการรันโปรแกรมจะส่งออก: % myprogram % WELCOME TO MY PROGRAM % Done. ฉันต้องการสคริปต์ต่อไปนี้เพื่อไม่ส่งออกอะไรไปยังสถานี #!/bin/bash myprogram > sample.s
149 bash 


12
ไม่พบคำสั่ง source ใน sh shell
ฉันมีสคริปต์ที่ใช้shเชลล์ ฉันพบข้อผิดพลาดในบรรทัดที่ใช้sourceคำสั่ง ดูเหมือนว่าsourceจะไม่รวมอยู่ในshเปลือกของฉัน ถ้าฉันพยายามเรียกใช้sourceจาก shell อย่างชัดเจนฉันจะได้รับ: sh: 1: source: not found ฉันควรติดตั้ง "แหล่ง" อย่างใดหรือไม่ ฉันมีรุ่นผิดshหรือเปล่า?
149 bash  shell  sh 

3
ค้นหาไฟล์ทั้งหมดที่มีชื่อไฟล์ขึ้นต้นด้วยสตริงที่ระบุหรือไม่
ฉันมีไดเรกทอรีที่มีไฟล์ประมาณ 100,000 ไฟล์และฉันต้องการใช้งานบางฟังก์ชั่นในทุกไฟล์ที่ขึ้นต้นด้วยสตริงที่ระบุซึ่งอาจตรงกับไฟล์นับหมื่น ฉันเหนื่อย ls mystring* แต่สิ่งนี้จะกลับมาพร้อมกับข้อผิดพลาดทุบตี 'มีจำนวนอาร์กิวเมนต์มากเกินไป' แผนต่อไปของฉันคือการใช้ find ./mystring* -type f แต่สิ่งนี้มีปัญหาเดียวกัน รหัสต้องมีลักษณะเหมือน for FILE in `find ./mystring* -type f` do #Some function on the file done
148 bash  find 

21
วิธีใช้ sed เพื่อลบบรรทัดสุดท้ายของไฟล์
ฉันต้องการที่จะลบบางnเส้นจากจุดสิ้นสุดของแฟ้ม สิ่งนี้สามารถทำได้โดยใช้ sed? ตัวอย่างเช่นหากต้องการลบบรรทัดจาก 2 เป็น 4 ฉันสามารถใช้ได้ $ sed '2,4d' file แต่ฉันไม่รู้หมายเลขบรรทัด ฉันสามารถลบบรรทัดสุดท้ายโดยใช้ $sed $d file แต่ฉันต้องการทราบวิธีลบเส้นnจากจุดสิ้นสุด โปรดแจ้งให้ฉันทราบวิธีการใช้ sed หรือวิธีอื่น
148 linux  bash  shell  sed 

11
bash: การเปลี่ยนตัวไม่ดี
#!/bin/bash jobname="job_201312161447_0003" jobname_pre=${jobname:0:16} jobname_post=${jobname:17} สคริปต์ทุบตีนี้ทำให้ฉันมีข้อผิดพลาดในการทดแทน Badบน Ubuntu ความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก

12
ปฏิเสธการอนุญาต GitHub: ตัวแทนเพิ่ม SSH ไม่มีตัวตน
นี่เป็นครั้งแรกที่ฉันเข้าถึง GitHub และฉันไม่เคยมีประสบการณ์ในการใช้คอนโซล ฉันใช้ MacBook โดยใช้ Bash เมื่อฉันพยายามเข้าถึง GitHub ฉันจะได้รับสิ่งนี้: git clone git@github.com:dhulihan/league-of-legends-data-scraper.git Cloning into 'league-of-legends-data-scraper'... Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. ฉันได้ลองทำตามคำแนะนำในหน้า Github เกี่ยวกับการอนุญาตถูกปฏิเสธ เมื่อฉันใช้ssh -vT git@github.comฉันได้รับต่อไปนี้: OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec …

6
การตั้งค่าตัวแปรสภาพแวดล้อม PATH ใน OSX อย่างถาวร
ฉันได้อ่านคำตอบหลายข้อเกี่ยวกับวิธีตั้งค่าตัวแปรสภาพแวดล้อมบน OSX เป็นแบบถาวร ก่อนอื่นฉันลองสิ่งนี้วิธีตั้งค่า $ PATH บน Linux / Unix อย่างถาวร แต่ฉันได้รับข้อความแสดงข้อผิดพลาดno such file and directoryดังนั้นฉันคิดว่าฉันสามารถลอง ~/.bash_profileแทนได้~/.profileแต่มันไม่ได้ผล ประการที่สองฉันพบวิธีนี้วิธีตั้งค่า $ PATH ตามที่แอปพลิเคชันใช้ใน os xซึ่งคำแนะนำในการเปลี่ยนแปลง ~ / .MacOSX / environment.plist แต่อีกครั้งฉันมีno such file and directoryข้อผิดพลาด ฉันต้องการวิธีตั้งค่าตัวแปรเหล่านี้เพื่อที่จะไม่ต้องตั้งค่าซ้ำแล้วซ้ำอีกทุกครั้งที่เปิดเซสชันเทอร์มินัลใหม่

10
พิมพ์วันที่แก้ไขล่าสุดของไฟล์ใน Bash
ฉันไม่สามารถหาวิธีพิมพ์วันที่ของไฟล์ได้ ฉันสามารถพิมพ์ไฟล์ทั้งหมดในไดเรกทอรีได้ แต่ฉันต้องพิมพ์วันที่ด้วย ฉันรู้ว่าฉันต้องแนบรูปแบบวันที่ด้วยเสียงสะท้อนของรายการ แต่ทั้งหมดฉันไม่พบรูปแบบที่ถูกต้อง echo "Please type in the directory you want all the files to be listed" read directory for entry in "$directory"/* do echo "$entry" done
147 bash  shell  file  date  unix 

9
วิธีหลอกให้แอปพลิเคชันคิดว่า stdout เป็นเทอร์มินัลไม่ใช่ไปป์
ฉันกำลังพยายามทำสิ่งที่ตรงกันข้ามกับ " ตรวจหาว่า stdin เป็นเทอร์มินัลหรือท่อหรือไม่ " ฉันกำลังเรียกใช้แอปพลิเคชันที่เปลี่ยนรูปแบบผลลัพธ์เนื่องจากตรวจพบไพพ์บน STDOUT และฉันต้องการให้คิดว่าเป็นเทอร์มินัลแบบโต้ตอบเพื่อให้ได้ผลลัพธ์เดียวกันเมื่อเปลี่ยนเส้นทาง ฉันคิดว่าการห่อไว้ในexpectสคริปต์หรือใช้proc_open()ใน PHP จะทำ แต่ไม่ได้ มีความคิดเห็นอะไรบ้าง?
147 bash  terminal  pipe  stdin 

6
ฉันจะลบข้อความทั้งหมดหลังจากตัวละครในทุบตีได้อย่างไร
ฉันจะลบข้อความทั้งหมดหลังจากตัวละครในกรณีนี้เครื่องหมายโคลอน (":") เป็นทุบตีได้อย่างไร ฉันสามารถนำโคลอนออกด้วยหรือไม่ ฉันไม่รู้จะทำยังไง
147 bash 

14
รอให้กระบวนการเสร็จสิ้น
มีคุณสมบัติในตัวใน Bash ที่จะรอให้กระบวนการเสร็จสิ้นหรือไม่? waitคำสั่งอนุญาตให้ใช้เพียงอย่างใดอย่างหนึ่งที่จะรอให้กระบวนการที่เด็กจะเสร็จสิ้น ฉันต้องการทราบว่ามีวิธีใดบ้างที่จะรอให้กระบวนการเสร็จสิ้นก่อนที่จะดำเนินการกับสคริปต์ใด ๆ วิธีการเชิงกลในการทำเช่นนี้มีดังต่อไปนี้ แต่ฉันต้องการที่จะทราบว่ามีคุณสมบัติในตัวใน Bash while ps -p `cat $PID_FILE` > /dev/null; do sleep 1; done
147 bash  scripting  process  wait 

9
ไม่พบคำสั่งเมื่อใช้ sudo
ฉันมีสคริปต์ที่เรียกว่าfoo.shในโฟลเดอร์บ้านของฉัน เมื่อฉันนำทางไปยังโฟลเดอร์นี้และป้อน./foo.shฉันจะได้รับ -bash: ./foo.sh: Permission denied. เมื่อฉันใช้sudo ./foo.shฉันได้รับ sudo: foo.sh: command not found. เหตุใดสิ่งนี้จึงเกิดขึ้นและฉันจะแก้ไขได้อย่างไร
146 linux  bash  sudo 

3
วิธีการเรียกใช้สคริปต์ในฐานะผู้ใช้อื่นโดยไม่ต้องใช้รหัสผ่าน?
ฉันมี script.sh ที่ต้องทำงานเป็น user2 อย่างไรก็ตามสคริปต์นี้สามารถเรียกใช้ภายใต้ user1 ในแอปพลิเคชันของฉัน ฉันต้องการคำสั่งต่อไปนี้เพื่อเรียกใช้: su user2 -C script.sh แต่สามารถรันได้โดยไม่ต้องใช้รหัสผ่าน ฉันต้องการให้สิ่งนี้มีข้อ จำกัด มากเนื่องจากใน user1 สามารถเรียกใช้งาน script.sh ภายใต้ user2 เท่านั้นและไม่มีอะไรอื่นอีก ฉันได้ลองทำสิ่งนี้ด้วยไฟล์ sudoers และเพิ่งจะสับสนไม่รู้จบหลังจากพยายามหลายชั่วโมง หากใครบางคนสามารถให้ตัวอย่างที่ชัดเจนของวิธีการนี้สามารถทำได้ (แทนที่จะเป็นสิ่งทั่วไปเช่นใช้ sudoers) ก็จะได้รับการชื่นชมอย่างมาก
145 linux  bash  sudo  su  sudoers 

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