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

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

4
จะเกิดอะไรขึ้นเมื่อฉันเรียกใช้ไฟล์ในเชลล์
ดังนั้นฉันคิดว่าฉันมีความเข้าใจที่ดีในเรื่องนี้ แต่เพียงแค่ทดสอบ (เพื่อตอบสนองต่อการสนทนาที่ฉันไม่เห็นด้วยกับใครบางคน) และพบว่าความเข้าใจของฉันมีข้อบกพร่อง ... ในรายละเอียดมากที่สุดจะเกิดอะไรขึ้นเมื่อฉันเรียกใช้ไฟล์ในเชลล์? สิ่งที่ฉันหมายถึงคือถ้าฉันพิมพ์: ./somefile some argumentsลงในเปลือกของฉันและกดย้อนกลับ (และsomefileมีอยู่ใน cwd และฉันได้อ่าน + ดำเนินการสิทธิ์บนsomefile) แล้วเกิดอะไรขึ้นภายใต้ประทุน? ฉันคิดว่าคำตอบคือ: เปลือกทำ syscall ให้execผ่านเส้นทางไปsomefile เคอร์เนลตรวจสอบsomefileและดูหมายเลขมายากลของไฟล์เพื่อตรวจสอบว่าเป็นรูปแบบที่โปรเซสเซอร์สามารถจัดการได้หรือไม่ หากหมายเลขมายากลระบุว่าไฟล์อยู่ในรูปแบบที่โปรเซสเซอร์สามารถใช้งานได้ กระบวนการใหม่ถูกสร้างขึ้น (โดยมีรายการในตารางกระบวนการ) somefileถูกอ่าน / แมปกับหน่วยความจำ สแต็กถูกสร้างขึ้นและการดำเนินการข้ามไปยังจุดเริ่มต้นของรหัสsomefileโดยARGVเริ่มต้นไปที่อาร์เรย์ของพารามิเตอร์ (a char**, ["some","arguments"]) หากจำนวนมายากลเป็นshebangแล้วexec()spawns กระบวนการใหม่ดังกล่าวข้างต้น แต่ปฏิบัติการที่ใช้เป็นล่ามอ้างอิงโดย shebang (เช่น/bin/bashหรือ/bin/perl) และsomefileถูกส่งไปยังSTDIN หากไฟล์ไม่มีหมายเลขเวทย์มนตร์ที่ถูกต้องแสดงว่ามีข้อผิดพลาดเช่น "ไฟล์ไม่ถูกต้อง (หมายเลขเวทย์มนตร์ที่ไม่ดี): เกิดข้อผิดพลาดในรูปแบบ Exec" อย่างไรก็ตามมีคนบอกฉันว่าถ้าไฟล์เป็นข้อความธรรมดาเชลล์จะพยายามเรียกใช้คำสั่ง (เช่นถ้าฉันพิมพ์bash somefile) ฉันไม่เชื่อเรื่องนี้ แต่ฉันแค่ลองมันและมันก็ถูกต้อง ดังนั้นฉันจึงมีความเข้าใจผิดอย่างชัดเจนเกี่ยวกับสิ่งที่เกิดขึ้นจริงที่นี่และต้องการที่จะเข้าใจกลไก จะเกิดอะไรขึ้นเมื่อฉันเรียกใช้ไฟล์ในเชลล์ (ในรายละเอียดมากพอสมควร …
32 shell  kernel  exec  shebang 

5
แสดงรายการไฟล์ที่เรียงตามจำนวนบรรทัดที่มี
ฉันจะแสดงรายการจำนวนบรรทัดในไฟล์/group/book/four/wordเรียงลำดับตามจำนวนบรรทัดที่มีได้อย่างไร ls -l คำสั่งรายการพวกเขาลง แต่ไม่ได้จัดเรียงพวกเขา
32 bash  shell  files  wc 


1
สัญลักษณ์แทนภายในคำพูด
นี่จะเป็นสิ่งที่ง่าย แต่ในความทรงจำของฉันเมื่อเชลล์สคริปต์การใช้เครื่องหมายคำพูดคู่จะช่วยให้การขยายแบบกลมและตัวแปร แต่ในรหัสต่อไปนี้: #!/bin/sh echo *.sh echo "*.sh" echo '*.sh' echo $LANG echo "$LANG" echo '$LANG' ฉันได้รับผลลัพธ์นี้: bob.sh redeployJboss.sh *.sh *.sh en_US.utf8 en_US.utf8 $LANG การโควตเดี่ยวจะป้องกันไม่ให้ glob และการขยายตัวแปรผัน แต่การโควตสองครั้งจะช่วยให้การขยายตัวแปรเท่านั้นและไม่มีการวนซ้ำ? ฉันสามารถโค้งในรูปแบบการอ้างอิงใด ๆ ?

6
นับจำนวนบรรทัดของเอาต์พุตจากโปรแกรมก่อนหน้า
ฉันพยายามนับจำนวนบรรทัดผลลัพธ์ที่โปรแกรมหนึ่งสร้าง ปัญหาคือโปรแกรมใช้เวลานานในการรันและฉันต้องการที่จะแสดงผลลัพธ์ให้กับผู้ใช้ มีวิธีนับจำนวนบรรทัดคำสั่งสุดท้ายที่เอาต์พุตหรือไม่? ฉันสามารถทำได้program | wc -lแต่นั่นจะไม่แสดงผลลัพธ์ให้กับผู้ใช้ เท่าที่ฉันรู้ฉันต้องทำprogram; program | wc -l- แต่โปรแกรมใช้เวลาอย่างน้อยหนึ่งนาทีในการทำงานดังนั้นฉันไม่ต้องการทำมากกว่าหนึ่งครั้งเพื่อแสดงการนับบรรทัดที่ด้านล่าง แก้ไข: มีวิธีการแสดงผลตามที่เกิดขึ้น (ทีละบรรทัด) แล้วส่งกลับนับในตอนท้าย?

3
วิธีตัด (เลือก) ฟิลด์จากการนับบรรทัดข้อความตั้งแต่สิ้นสุด?
ฉันรู้วิธีเลือกเขตข้อมูลจากบรรทัดโดยใช้คำสั่ง cut ตัวอย่างเช่นให้ข้อมูลต่อไปนี้: a,b,c,d,e f,g,h,i,j k,l,m,n,o คำสั่งนี้: cut -d, -f2 # returns the second field of the input line ผลตอบแทน: b g l คำถามของฉัน: ฉันจะเลือกเขตข้อมูลที่สองนับจากท้ายได้อย่างไร ในตัวอย่างก่อนหน้าผลลัพธ์จะเป็น: d i n

2
การเปลี่ยนเส้นทาง“ <<(…)” หมายถึงอะไร
ฉันเห็นว่า rvm (ตัวจัดการเวอร์ชัน ruby) ติดตั้งโดยใช้คำสั่งต่อไปนี้: bash &lt; &lt;(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer ) ดังนั้นฉันเข้าใจว่าเราได้รับเนื้อหาของสคริปต์และส่งต่อไปยัง bash (ฉันเชื่อ&lt; &lt;และ&lt;&lt;เป็นสิ่งเดียวกันหรือไม่) ฉันสนใจใน&lt; &lt;ส่วนนี้พบคำอธิบายต่อไปนี้บนเน็ต: &lt;&lt; โทเค็นหมายถึงใช้กระแสอินพุตปัจจุบันเป็น STDIN สำหรับโปรแกรมจนกว่าจะเห็นโทเค็น เรื่องนี้ไม่ชัดเจนสำหรับฉันใครบางคนสามารถเป็นตัวอย่างหรืออธิบายในวิธีที่ง่ายขึ้น?

3
สคริปต์ bash สามารถเชื่อมโยงกับไฟล์ได้หรือไม่?
ฉันต้องการให้สคริปต์เข้าสู่โหมดสลียกเว้นว่ามีการแก้ไข / ลบไฟล์บางไฟล์ (หรือไฟล์ที่สร้างในไดเรกทอรีหรือ ... ) สามารถทำได้ในลักษณะที่สง่างาม? สิ่งที่ง่ายที่สุดที่อยู่ในใจของฉันคือการวนรอบที่หลับสักพักก่อนที่จะตรวจสอบสถานะอีกครั้ง แต่อาจมีวิธีที่สง่างามกว่านี้ไหม
32 linux  shell  files  hook 

5
จะทราบระดับของกระสุนที่ฉันอยู่ได้อย่างไร
ถ้าฉันเปิดเทอร์มินัลเหมือนxtermฉันจะมีเชลล์ ถ้าฉันใช้sshหรือzshฉันจะมีระดับ "เชลล์" อีกอัน มีวิธีรู้หรือไม่ว่าฉันต้องCtrl+Dพิมพ์กี่ครั้งexitเพื่อออกจากพวกเขาทั้งหมด? ความตั้งใจที่แท้จริงของฉันคือการออกจากทุกอย่างยกเว้นเปลือก "รูท" นอกจากนี้ยังเป็นการดีที่จะรู้ว่าเอฟเฟกต์มัลติเพล็กเซอร์ (เช่นscreen) มีผลต่อการแก้ปัญหาอย่างไร PS: โปรดเปลี่ยนชื่อฉันไม่ทราบว่าเป็นคำที่ถูกต้อง
32 shell  terminal 

4
บันทึกสถานะเซสชันหน้าจอ GNU ที่สมบูรณ์
เป็นไปได้ไหมที่จะคงสถานะ "สถานะ" ของหน้าต่างหน้าจอ GNU (หรือเพียงเปลือกมาตรฐาน) เพื่อให้ฉันสามารถโหลดทุกอย่างใหม่หลังจากรีบูต: จำนวนของเชลล์ที่เปิด ชื่อของแต่ละเชลล์ ไดเรกทอรีปัจจุบันของแต่ละเชลล์ ประวัติของแต่ละเชลล์ ถ้าเป็นไปได้ตัวแปรสภาพแวดล้อมของพวกเขา
32 shell  gnu-screen 

2
เปลือกหมายถึงอะไรในโหมด“ vi” หรือโหมด“ emacs”?
คำถามนี้ดังต่อไปนี้โดยตรงจากคำตอบ ในกรณีนี้ฉันไม่สามารถเข้าใจส่วนที่ระบุว่า: ในเรื่องนั้นพฤติกรรมของมันใกล้เคียงกับ emacs 'มากกว่าด้วยโหมด bash (readline) / ksh / zsh emacs แต่แยกออกจากตัวแก้ไขเส้นฝังไดรเวอร์ของเทอร์มินัล (ในโหมด canonical) ซึ่งCtrl-Wจะลบคำก่อนหน้า (werase และใน vi ) ที่นี่เรากำลังพูดถึงเชลล์และไม่ใช่บรรณาธิการซึ่งเป็นสองโปรแกรมที่แตกต่างกัน การบอกว่าเชลล์อยู่ในโหมดตัวแก้ไขบางอย่างหมายความว่าอย่างไร PS: คุณสามารถยึดคำตอบของคุณบนฐานที่ฉันเข้าใจว่าเชลล์คืออะไรและใช้ vim สำหรับการแก้ไขพื้นฐานได้อย่างไร

12
ใช้การแจ้งเตือน - ส่งด้วย cron
ฉันใช้ Arch Linux กับ KDE / Awesome WM ฉันพยายามที่จะได้รับ ในการทำงานด้วยnotify-sendcron ฉันได้ลองตั้งค่าDISPLAY/ XAUTHORITYตัวแปรและใช้งานnotify-sendด้วย "sudo -u" โดยไม่มีผลลัพธ์ ฉันสามารถโทรแจ้ง - ส่งแบบโต้ตอบจากเซสชันและรับการแจ้งเตือน FWIW งาน cron ทำงานได้ดีซึ่งฉันตรวจสอบโดยการสะท้อนสิ่งที่เป็นไฟล์ชั่วคราว มันเป็นเพียง "แจ้ง - ส่ง" ที่ล้มเหลวในการทำงาน รหัส: [matrix@morpheus ~]$ crontab -l * * * * * /home/matrix/scripts/notify.sh [matrix@morpheus ~]$ cat /home/matrix/scripts/notify.sh #!/bin/bash export DISPLAY=127.0.0.1:0.0 export XAUTHORITY=/home/matrix/.Xauthority echo "testing cron" …

2
มีเครื่องมือบรรทัดคำสั่ง unix ที่สามารถวิเคราะห์ไฟล์ตัวอักษร?
ให้ไดเรกทอรีของไฟล์ฟอนต์ (TTF และ OTF) ฉันต้องการตรวจสอบแต่ละฟอนต์และกำหนดว่าสไตล์ใด (ปกติ, ตัวเอียง, ตัวหนา, ตัวหนา - ตัวเอียง) มีเครื่องมือบรรทัดคำสั่งสำหรับระบบปฏิบัติการ unix ปรุงแต่งที่สามารถทำได้หรือไม่? หรือใครรู้วิธีการดึงข้อมูลเมตาจากไฟล์แบบอักษร TTF หรือ OTF?

2
วิธีการแตกไฟล์และเอาท์พุทจากคำสั่ง?
โดยปกติคุณจะเขียน: diff file1 file2 แต่ฉันต้องการ diff ไฟล์และผลลัพธ์จากคำสั่ง (ที่นี่ฉันทำให้คำสั่งเล็กน้อย): diff file1 &lt;(cat file2 | sort) ตกลงงานนี้เมื่อฉันป้อนด้วยตนเองที่ shell prompt แต่เมื่อฉันใส่บรรทัดเดียวกันในเชลล์สคริปต์แล้วรันสคริปต์ฉันได้รับข้อผิดพลาด ดังนั้นคำถามคือ - วิธีการทำอย่างถูกต้อง? แน่นอนฉันต้องการหลีกเลี่ยงการเขียนผลลัพธ์ไปยังไฟล์ชั่วคราว

5
แสดงรายการคำสั่งทั้งหมดที่เชลล์รู้
ฉันจะพิมพ์อะไรที่เปลือกของฉัน (ซึ่งเกิดขึ้นbash) ที่จะแสดงรายการคำสั่งทั้งหมดที่ได้รับการยอมรับ? นอกจากนี้สิ่งนี้แตกต่างกันตามเชลล์หรือไม่ หรือว่าเชลล์ทั้งหมดมีแค่ "ไดเรกทอรี" ของคำสั่งที่พวกมันรู้จัก? ประการที่สองคำถามที่แตกต่างกัน แต่ฉันจะลบล้างคำถามเหล่านั้นได้อย่างไร ในคำอื่น ๆ วิธีการที่ฉันสามารถเขียนของตัวเองviewคำสั่งเพื่อแทนที่หนึ่งที่มีอยู่ในระบบ Ubuntu vimของฉันซึ่งดูเหมือนจะเป็นเพียงแค่โหลด
32 shell  command 

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