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

เชลล์เป็นอินเตอร์เฟสบรรทัดคำสั่งของ Unix คุณสามารถพิมพ์คำสั่งในเชลล์แบบโต้ตอบหรือเขียนสคริปต์เพื่อทำงานอัตโนมัติ ใช้แท็กนี้สำหรับคำถามที่ใช้กับ / bin / sh และเชลล์ที่เข้ากันได้มากที่สุด (ash, bash, ksh, zsh, …) สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาดโปรดตรวจสอบใน http://shellcheck.net ก่อนโพสต์ที่นี่

6
เมื่อใดที่คุณใช้การขยายรั้ง
ฉันเข้าใจว่าการขยายรั้งคืออะไร แต่ฉันไม่รู้ว่าจะใช้งานได้อย่างไร คุณจะใช้เมื่อไหร่? กรุณาสอนตัวอย่างที่สะดวกและน่าทึ่งให้ฉันถ้าคุณมีเคล็ดลับของคุณเอง

7
ทำไม ls -d ยังแสดงรายการไฟล์และเอกสารอยู่ที่ไหน?
เมื่อระบุls --directory a*ว่าควรแสดงเฉพาะไดเรกทอรีที่ขึ้นต้นด้วยa* แต่มันจะแสดงรายการไฟล์และไดเรกทอรีที่เริ่มต้นด้วย a คำถาม : ที่ฉันอาจพบเอกสารบางอย่างเกี่ยวกับเรื่องนี้อื่น ๆ กว่าmanและinfoที่ผมคิดว่าผมมองอย่างละเอียด? ทำงานใน BASH เท่านั้นหรือไม่
48 bash  shell  ls  wildcards  options 

4
ฉันจะลบองค์ประกอบออกจากอาร์เรย์ได้อย่างไร
unset array[0]เอาองค์ประกอบ แต่ถ้าฉันจะecho ${array[0]}ได้รับค่า Null นอกจากนี้ยังมีวิธีอื่นในการทำเช่นนี้ แต่ถ้าองค์ประกอบของอาร์เรย์มีช่องว่างเช่นด้านล่าง array[0]='james young' array[1]='mary' array[2]='randy orton' แต่สิ่งเหล่านี้ก็ไม่สามารถทำงานได้เช่นกัน array=${array[@]:1} #removed the 1st element ตอนนี้ฉันต้องการอาร์เรย์ใหม่ให้เป็นเหมือน array[0]='mary' array[1]='randy orton' ช่องว่างทำให้เกิดปัญหาหลังจากการกำหนดและอาร์เรย์ที่แท้จริงกลายเป็นเหมือนการทดแทน array=(mary randy orton)

16
ลบรายการ $ PATH ซ้ำด้วยคำสั่ง awk
ฉันพยายามเขียนฟังก์ชัน bash shell ที่จะอนุญาตให้ฉันลบสำเนาของไดเรกทอรีที่ซ้ำกันออกจากตัวแปรสภาพแวดล้อม PATH ของฉัน ฉันถูกบอกว่าเป็นไปได้ที่จะบรรลุสิ่งนี้ด้วยคำสั่งหนึ่งบรรทัดโดยใช้awkคำสั่ง แต่ฉันไม่สามารถหาวิธีที่จะทำได้ มีใครรู้บ้าง
48 bash  shell  awk  path 

6
ฉันจะอ่านทีละบรรทัดจากตัวแปรใน bash ได้อย่างไร
ฉันมีตัวแปรที่มีเอาต์พุตหลายบรรทัดของคำสั่ง วิธีที่มีประสิทธิภาพมากที่สุดในการอ่านบรรทัดเอาต์พุตโดยบรรทัดจากตัวแปรคืออะไร ตัวอย่างเช่น: jobs="$(jobs)" if [ "$jobs" ]; then # read lines from $jobs fi
48 bash  shell  io  cat 

3
Bash: double เท่ากับ vs -eq
ฉันทำการเปรียบเทียบจำนวนเต็มในทุบตี (พยายามดูว่าผู้ใช้ทำงานเป็น root) และฉันพบสองวิธีแตกต่างกัน: สองเท่ากับ if [ $UID == 0 ] then fi -eq if [ $UID -eq 0 ] then fi ผมเข้าใจว่าไม่มี> = หรือ <= ในทุบตีเพียง -GE และเลอจึงเป็นเหตุผลว่าทำไมมี==ถ้ามี-eq? มีความแตกต่างในวิธีการเปรียบเทียบทั้งสองด้านหรือไม่?
47 bash  shell  arithmetic 

7
วิธีคืนค่าของตัวเลือกเชลล์เช่น `set -x`?
ฉันต้องการที่จะset -xจุดเริ่มต้นของสคริปต์ของฉันและ "ยกเลิก" มัน (กลับไปยังรัฐก่อนที่ผมตั้งไว้) +xหลังจากนั้นแทนสุ่มสี่สุ่มห้าการตั้งค่า เป็นไปได้ไหม PS: ฉันตรวจสอบแล้วที่นี่ ; ที่ดูเหมือนจะไม่ตอบคำถามเท่าที่ฉันจะบอกได้
47 bash  shell 

8
มีโปรแกรมที่สามารถส่งอีเมลแจ้งเตือนเมื่อกระบวนการเสร็จสิ้นหรือไม่?
ฉันเป็นนักวิทยาศาสตร์การคำนวณและฉันใช้การคำนวณจำนวนมากบนลีนุกซ์ โดยเฉพาะฉันเรียกใช้การจำลองโมเลกุล (MD) โดยใช้แพ็คเกจ GROMACS การจำลองเหล่านี้อาจใช้เวลาหลายวันหรือหลายสัปดาห์ทำงานบน (เช่น) 8 ถึง 24 แกน ฉันสามารถเข้าถึงหลายโหนดของคลัสเตอร์ซึ่งหมายความว่าในเวลาใดก็ตามฉันกำลังทำงานประมาณ 4 หรือ 5 งาน (แต่ละงานบนโหนดที่แตกต่างกันและแต่ละงานใน 8-24 คอร์) ปัญหาคือว่าการจำลองใช้เวลาจำนวนตัวแปร ฉันต้องการให้โหนดทั้งหมดทำงานกับการจำลองตลอดเวลา แต่เพื่อเริ่มต้นการจำลองใหม่ฉันต้องทำการล็อกอินด้วยเทอร์มินัลและทำงานด้วยตนเอง แต่ฉันมักจะลืมเวลาที่เหลืออยู่ในการจำลองดังนั้นฉันมักจะตรวจสอบพวกเขาตลอดเวลา มีวิธีใดบ้างที่ฉันสามารถรับอีเมลเมื่อกระบวนการ Linux เสร็จสิ้น มีโปรแกรม Linux ที่ทำสิ่งนี้หรือไม่? ด้วยวิธีนี้ฉันจะรู้ว่าเมื่อใดที่ต้องล็อกอินด้วยเทอร์มินัลและเตรียมการจำลองต่อไป ฉันใช้ Ubuntu Linux ขอบคุณที่สละเวลา.
46 shell  process  email 

2
bash-builtins 'set' และ 'export' ทำอะไรได้บ้าง
ฉันมีการสูญเสียเล็กน้อยตามวัตถุประสงค์setและexportใน Bash (และฉันก็เดาว่าอาจเป็นหอยอื่นด้วย) ฉันคิดว่ามันเป็นการตั้งค่าตัวแปรสภาพแวดล้อม แต่สามารถทำได้ด้วยVARIABLE=VALUEใช่ไหม พิมพ์setและexportแสดงค่าที่แตกต่างด้วยตัวเอง ดังนั้นวัตถุประสงค์ของพวกเขาคืออะไร?
46 bash  shell 

4
echo bytes เป็นไฟล์
ฉันกำลังพยายามเชื่อมต่อ rasberry Pi ของฉันกับจอแสดงผลบางตัวโดยใช้บัส i2c ในการเริ่มต้นฉันต้องการเขียนเนื้อหาด้วยตนเองโดยเฉพาะอย่างยิ่งไบต์กับไฟล์ คุณเขียนไบต์ที่ต้องการลงไฟล์ได้อย่างไร? ฉันได้อ่านแล้วและฉันคิดว่าปัญหาของฉันควรได้รับการแก้ไขโดยสิ่งนี้ echo -n -e \x66\x6f\x6f > byteFileForNow อย่างไรก็ตามเมื่อฉันเปิดไฟล์ด้วยนาโนแทนที่จะเป็นฟูฉันเห็น: x66x6fx6f ดังนั้นแบ็กสแลชจึงหนีไปได้ แต่ไม่ใช่ไบท์เอง ฉันก็ลองแบบเดียวกันโดยไม่ใช้-eคราวนี้ฉันเลยจะได้เห็นภาพ\ x66 \ x6f \ x6fแต่กลับเหมือนเดิม ดังนั้นเสียงก้องคือการหลีกเลี่ยงแบ็กสแลช, แบ็กสแลชคนเดียวและแบ็กสแลชโดยไม่คำนึงว่าควรจะเป็นอะไร ความคิดวิธีการแก้ไขปัญหานี้? ตามหน้าคนที่ควรจะทำสิ่งที่ฉันกำลังมองหา

2
รีสตาร์ท bash จากเทอร์มินัลโดยไม่ต้องรีสตาร์ทแอปพลิเคชั่นเครื่อง (mac)?
ฉันได้ดูรอบ ๆ เพื่อตอบคำถามนี้ แต่ฉันดูเหมือนจะไม่พบ (ซึ่งแปลก) คำถามของฉันคือมีวิธีง่าย ๆ ในการรีสตาร์ทเซสชัน bash จากภายในเทอร์มินัลบน mac ฉันต้องการพฤติกรรมแบบเดียวกับที่ฉันปิดแอปพลิเคชั่นเทอร์มินัลและเริ่มต้นใหม่อีกครั้ง (ตัวแปรทั้งหมดรีเซ็ต, .bash_profile แหล่งที่มา ฯลฯ ) ฉันรู้วิธีแหล่ง. bash_profile แต่นั่นไม่ใช่สิ่งที่ฉันต้องการ หนึ่งในเหตุผลที่ฉันต้องการทำเช่นนี้เป็นเพราะปลั๊กอินสำหรับพรอมต์ทุบตีของฉันมีรหัสที่ป้องกันไม่ให้สีโหลดหลายครั้ง ดังนั้นการจัดหา. bash_profile จะไม่โหลดตัวแปรสีอีกครั้งและฉันต้องรีสตาร์ทแอปพลิเคชันเทอร์มินัลเพื่อรับผลการเปลี่ยนแปลง
46 bash  shell 

8
เหตุใดยูทิลิตี้บังคับ POSIX จึงไม่ได้สร้างไว้ในเชลล์?
จุดประสงค์ของคำถามนี้คือเพื่อตอบสนองความอยากรู้อยากเห็นไม่ใช่เพื่อแก้ปัญหาการคำนวณโดยเฉพาะ คำถามคือ: เหตุใดยูทิลิตี้บังคับ POSIX จึงไม่ได้สร้างอยู่ในการใช้งานเชลล์? ตัวอย่างเช่นฉันมีสคริปต์ที่อ่านไฟล์ข้อความเล็ก ๆ น้อย ๆ และตรวจสอบว่ามีการฟอร์แมตอย่างถูกต้อง แต่ใช้เวลา 27 วินาทีในการเรียกใช้บนเครื่องของฉันเนื่องจากมีการจัดการสตริงจำนวนมาก การจัดการสตริงนี้สร้างกระบวนการใหม่นับพันโดยเรียกโปรแกรมอรรถประโยชน์ต่าง ๆ ดังนั้นความเชื่องช้า ผมค่อนข้างมั่นใจว่าถ้าบางส่วนของสาธารณูปโภคที่ถูกสร้างขึ้นในคือgrep, sed, cut, trและexprแล้วสคริปต์ที่จะวิ่งในครั้งที่สองหรือน้อยกว่า (ขึ้นอยู่กับประสบการณ์ของผมใน C) ดูเหมือนว่าจะมีหลายสถานการณ์ที่การสร้างโปรแกรมอรรถประโยชน์เหล่านี้จะสร้างความแตกต่างระหว่างว่าโซลูชันในเชลล์สคริปต์มีประสิทธิภาพที่ยอมรับได้หรือไม่ เห็นได้ชัดว่ามีเหตุผลที่เลือกที่จะไม่สร้างยูทิลิตี้เหล่านี้ในตัวอาจมียูทิลิตี้หนึ่งเวอร์ชันในระดับระบบเพื่อหลีกเลี่ยงการมียูทิลิตี้รุ่นนั้นไม่เท่ากันหลายรุ่น ฉันไม่สามารถคิดด้วยเหตุผลอื่น ๆ อีกมากมายที่จะรักษาค่าใช้จ่ายในการสร้างกระบวนการใหม่จำนวนมากและ POSIX กำหนดเพียงพอเกี่ยวกับยูทิลิตี้ที่ดูเหมือนว่าปัญหาจะมีการใช้งานที่แตกต่างกันไม่มาก ไม่ขัดขืน อย่างน้อยก็ไม่เป็นปัญหาใหญ่เท่าความไร้ประสิทธิภาพของการมีกระบวนการมากมาย

2
ปิดใช้งานการปิดหน้าต่าง CTRL-D ในเทอร์มิเนเตอร์ (เทอร์มินัลอีมูเลเตอร์)
ฉันมักจะเข้าสู่ระบบผ่านช่วง SSH หลายครั้ง ในการออกจากระบบของฉันฉันกดCTRL+ dจนกระทั่งฉันกลับไปที่เครื่องท้องถิ่น อย่างไรก็ตามบางครั้งฉันกดหลายครั้งเกินไปและเทอร์มินัลของฉันออก มีวิธีการปิดกั้นCTRL+ dจากการปิดสถานีของฉันหรือไม่? ฉันใช้ terminator เป็นโปรแกรมจำลองเทอร์มินัล

4
อะไรคือความแตกต่างระหว่างการเรียกใช้โปรแกรมเป็น daemon และฟอร์กมันลงในพื้นหลังด้วย '&'
อะไรคือความแตกต่างในทางปฏิบัติจากมุมมองดูแลระบบเมื่อปรับใช้บริการบนระบบที่ใช้ระบบปฏิบัติการยูนิกซ์?

9
ค้นหาการค้นหาในไดเรกทอรีหลักแทนไดเรกทอรีย่อย
ฉันซ้อนอยู่ในแผนผังไฟล์และฉันต้องการค้นหาไดเรกทอรีหลักที่มีไฟล์อยู่ เช่นฉันอยู่ในกลุ่มของที่เก็บ Git ซ้อนกันและต้องการค้นหาไดเรกทอรี. git ที่ควบคุมไฟล์ที่ฉันกำลังอยู่ ฉันหวังว่าจะได้พบกับบางสิ่งบางอย่างเช่น -searchup -iname ".git"
45 shell  find 

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