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

คำถามเกี่ยวกับเชลล์สคริปต์ไฟล์เรียกทำงานที่ตีความโดยเชลล์ (bash, zsh ฯลฯ )


5
ทุบตีซีดีจนในบางโฟลเดอร์
ฉันทำงานมากมายใน Magento และทำคนมากมายที่ฉันทำงานด้วยและมันก็น่ารำคาญที่ต้องพิมพ์: cd ../../../../../../ หากต้องการพบว่าคุณยังคงมีไดเรกทอรีไม่กี่ไดเรกทอรีจากโฟลเดอร์ 'httpdocs' ของคุณดังนั้นฉันจึงพยายามสร้างสคริปต์ที่ตามด้วยรหัสหลอกนี้: while lowest level directory != httpdocs cd ../ end while; ดูเหมือนง่ายมากฉันสมมติว่าฉันต้องทำ grep บางรูปแบบในการตรวจสอบว่าส่วนสุดท้ายของไดเรกทอรีการทำงานปัจจุบันคือ httpdocs หรือไม่ถ้าไม่ใช่แค่เพิ่มระดับไปเรื่อย ๆ จนกว่ามันจะเป็นจริง ฉันได้รับการดูการเรียนรู้ทุบตีนี้แม้ว่าดูเหมือนว่าจะต้องมีบางสิ่งบางอย่างออกมีแล้วที่คล้ายกันและไวยากรณ์ที่ไขปริศนาฉันไม่สิ้นสุด

5
ดูไฟล์ในไฟล์เก็บถาวร tar โดยไม่แตกไฟล์
ฉันต้องการที่จะดูเนื้อหาของแฟ้ม tarred โดยไม่ต้องแยกมันสถานการณ์: ฉันมี a.tar ./x/y.txtและภายในมีไฟล์ที่เรียกว่า ฉันต้องการที่จะดูเนื้อหาของจริงโดยไม่ต้องสกัดy.txta.tar

4
จะเขียนเชลล์สคริปต์ที่เรียกใช้งานบนล็อกอินได้อย่างไร?
ฉันกำลังพยายามเขียนสคริปต์ bash shell ใน Ubuntu 11.10 Linux distro ที่จะถูกดำเนินการโดยอัตโนมัติเมื่อเข้าสู่ระบบ แต่ฉันไม่สามารถเข้าใจได้ว่าสิ่งใดที่จะเขียนในสคริปต์ว่าจะดำเนินการโดยอัตโนมัติเมื่อเข้าสู่ระบบ

3
ฟังเพื่อออกจากกระบวนการรับ pid $$
บอกว่าฉันมี pid อยู่ในมือ mypid=$$ มีคำสั่ง bash / system บ้างที่ฉันสามารถใช้ฟังเพื่อออกจากกระบวนการนั้นด้วย pid ที่กำหนด? หากไม่มีกระบวนการที่มี mypid อยู่ฉันเดาว่าคำสั่งควรล้มเหลว

7
มีวิธีป้องกันไม่ให้ sed ตีความหมายของสตริงการแทนที่หรือไม่? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว หากคุณต้องการแทนที่คำหลักด้วยสตริงที่ใช้ sed, sed พยายามอย่างหนักเพื่อตีความสตริงการแทนที่ของคุณ หากสตริงการแทนที่มีอักขระที่พิจารณาว่าพิเศษเช่นอักขระ '/' สตริงนั้นจะล้มเหลวเว้นแต่แน่นอนว่าคุณหมายถึงสตริงการแทนที่ของคุณที่จะมีอักขระที่บอกให้รู้ว่าจะต้องทำอย่างไร Ex: VAR="hi/" sed "s/KEYWORD/$VAR/g" somefile มีวิธีใดที่จะบอกว่าอย่าพยายามตีความสตริงการแทนที่สำหรับอักขระพิเศษ? สิ่งที่ฉันต้องการคือสามารถแทนที่คำหลักในไฟล์ด้วยเนื้อหาของตัวแปรไม่ว่าเนื้อหานั้นจะเป็นอะไร
16 bash  shell-script  sed 

3
ทำไมชื่อโฟลเดอร์ของฉันถึงจบลงเช่นนี้และฉันจะแก้ไขได้อย่างไรโดยใช้สคริปต์
ขออภัยถ้านี่มีคำตอบที่อื่นฉันไม่ทราบวิธีค้นหาปัญหาของฉัน ฉันใช้การจำลองบางอย่างบนเซิร์ฟเวอร์ linux HPC redhat และรหัสของฉันสำหรับการจัดการโครงสร้างโฟลเดอร์เพื่อบันทึกผลลัพธ์มีข้อผิดพลาดที่โชคร้าย รหัส matlab ของฉันเพื่อสร้างโฟลเดอร์คือ: folder = [sp.saveLocation, 'run_', sp.run_number, '/']; ที่sp.run_numberเป็นจำนวนเต็ม ฉันลืมแปลงเป็นสตริง แต่ด้วยเหตุผลบางอย่างที่ทำงานmkdir(folder);(ใน matlab) ยังคงประสบความสำเร็จ ในความเป็นจริงการจำลองวิ่งโดยไม่มีการผูกปมและข้อมูลถูกบันทึกลงในไดเรกทอรีที่ตรงกัน ตอนนี้เมื่อโครงสร้างโฟลเดอร์ถูกสอบถาม / พิมพ์ฉันได้รับสถานการณ์ต่อไปนี้: เมื่อฉันพยายามแท็บเติมข้อความอัตโนมัติ: run_ run_^A/ run_^B/ run_^C/ run_^D/ run_^E/ run_^F/ run_^G/ run_^H/ run_^I/ เมื่อฉันใช้ls: run_ run_? run_? run_? run_? run_? run_? run_? run_? run_? run_?. เมื่อฉันถ่ายโอนไปยัง mac ของฉันโดยใช้ …

6
การใช้ / bin / sh ใน hashbang นั้นถูกต้องหรือไม่หากเชลล์เป้าหมายไม่สามารถใช้งานได้
#!/bin/shโดยทั่วไปเชลล์สคริปต์มีความคิดเห็นต่อไปนี้ที่บรรทัดแรกของไฟล์สคริปต์: จากการวิจัยที่ฉันทำมันเรียกว่า "hash bang" และมันเป็นความเห็นทั่วไป /binความคิดเห็นนี้แจ้งยูนิกซ์ว่าไฟล์นี้จะถูกดำเนินการโดยบอร์นเชลล์ภายใต้ไดเรกทอรี คำถามของฉันเริ่มต้นในจุดนั้น #!/bin/bashถึงตอนนี้ฉันไม่ได้เห็นความคิดเห็นนี้เช่น #!/bin/shมันก็มักจะ อย่างไรก็ตามการแจกแจง Ubuntu ไม่มีโปรแกรม Bourne Shell พวกเขามี Bourne Again Shell (ทุบตี) ในจุดนั้นถูกต้องหรือไม่ที่จะแสดงความคิดเห็น#!/bin/shในเชลล์สคริปต์ที่เขียนในการแจกแจงของ Ubuntu?

3
หัวกินอักขระพิเศษ
คำสั่ง shell ต่อไปนี้คาดว่าจะพิมพ์บรรทัดคี่ของอินพุตสตรีมเท่านั้น: echo -e "aaa\nbbb\nccc\nddd\n" | (while true; do head -n 1; head -n 1 >/dev/null; done) aaaแต่มันเป็นเพียงแค่พิมพ์บรรทัดแรก: สิ่งเดียวกันจะไม่เกิดขึ้นเมื่อใช้กับตัวเลือก-c( --bytes): echo 12345678901234567890 | (while true; do head -c 5; head -c 5 >/dev/null; done) คำสั่งนี้ส่งออก1234512345ตามที่คาดไว้ แต่นี้จะทำงานเฉพาะในcoreutilsการดำเนินงานของheadยูทิลิตี้ busybox12345การดำเนินงานยังคงกินอักขระพิเศษเพื่อการส่งออกเป็นเพียง ฉันเดาว่าวิธีการใช้งานเฉพาะอย่างนี้ทำเพื่อการเพิ่มประสิทธิภาพ คุณไม่สามารถรู้ได้ว่าเส้นไหนจะจบลงดังนั้นคุณจะไม่ทราบว่าต้องอ่านตัวอักษรกี่ตัว วิธีเดียวที่จะไม่ใช้อักขระพิเศษจากอินพุตสตรีมคือการอ่านสตรีมไบต์เป็นไบต์ แต่การอ่านจากสตรีมทีละหนึ่งไบต์อาจช้า ดังนั้นฉันเดาว่าheadอ่านอินพุตสตรีมไปยังบัฟเฟอร์ใหญ่พอสมควรแล้วนับจำนวนบรรทัดในบัฟเฟอร์นั้น ไม่สามารถพูดแบบเดียวกันสำหรับกรณีได้เมื่อใช้--bytesตัวเลือก ในกรณีนี้คุณรู้จำนวนไบต์ที่คุณต้องอ่าน ดังนั้นคุณอาจอ่านจำนวนไบต์นี้อย่างแน่นอนและไม่มากกว่านั้น corelibsการดำเนินการจะใช้โอกาสนี้ แต่busyboxหนึ่งไม่ก็ยังคงอ่านไบต์มากขึ้นกว่าที่จำเป็นเข้าไปในกันชน มันอาจทำเพื่อทำให้การใช้งานง่ายขึ้น ดังนั้นคำถาม …

8
วิธีการทดสอบว่าองค์ประกอบอาร์เรย์มีความเท่าเทียมกันในการทุบตี?
อาร์เรย์ต่อไปนี้แสดงจำนวนดิสก์ในเครื่อง linux แต่ละเครื่อง แต่ละอาร์เรย์เดียวรวมถึงจำนวนของดิสก์ในที่เครื่องลินุกซ์ echo ${ARRAY_DISK_Quantity[*]} 4 4 4 4 2 4 4 4 วิธีง่ายๆในการระบุว่าทุกค่าของอาร์เรย์มีค่าเท่ากัน? สถานะที่ดี: 4 4 4 4 4 4 4 4 สถานะไม่ดี: 4 4 4 4 4 4 2 4 สถานะไม่ดี: 6 6 6 6 6 6 6 6 6 6 2 6 2
15 bash  shell-script  awk  array 

5
วิธีการตรวจสอบบรรทัดของสคริปต์ทุบตีจะถูกดำเนินการ
มีวิธีการตรวจสอบหมายเลขบรรทัดของbashสคริปต์ที่จะถูกดำเนินการ "ตอนนี้"? การใช้bash -x script.shรูปลักษณ์ที่ดูดี อย่างไรก็ตามฉันต้องได้รับหมายเลขบรรทัดปัจจุบัน

5
เป็นโปรแกรม "ถ้า" และ "แล้ว" ที่จริงแล้ว
ฉันอ่านว่าใช้เครื่องหมายอัฒภาคเพื่อคั่นโปรแกรม: $ echo 3; ls -la มันหมายความว่าอย่างนั้นifหรือthenและelseเป็นโปรแกรมแยกต่างหากที่นี่ $ if [ $VARIABLE == abcdef ] ; then echo yes ; else echo no ; fi คำถามนี้ไม่เกี่ยวกับเครื่องหมายอัฒภาค


6
การใช้รหัส“ สงวน” สำหรับสถานะการออกของเชลล์สคริปต์
ฉันเพิ่งเจอรายการรหัสทางออกนี้ด้วยความหมายพิเศษจากคู่มือการใช้สคริปต์การทุบตีขั้นสูง พวกเขาอ้างถึงรหัสเหล่านี้เป็นการสงวนและแนะนำว่า: ตามตารางด้านบนรหัสทางออก 1-2, 126-165 และ 255 มีความหมายพิเศษและควรหลีกเลี่ยงสำหรับพารามิเตอร์ทางออกที่ผู้ใช้ระบุ ไม่นานมานี้ฉันเขียนสคริปต์ซึ่งใช้รหัสสถานะการออกต่อไปนี้: 0 - สำเร็จ 1 - ชื่อโฮสต์ไม่ถูกต้อง 2 - ระบุอาร์กิวเมนต์ที่ไม่ถูกต้อง 3 - สิทธิ์ผู้ใช้ไม่เพียงพอ เมื่อฉันเขียนสคริปต์ฉันไม่ทราบรหัสทางออกพิเศษดังนั้นฉันจึงเริ่มต้นที่ 1 สำหรับเงื่อนไขข้อผิดพลาดแรกและเพิ่มสถานะทางออกสำหรับแต่ละประเภทข้อผิดพลาดต่อเนื่อง ฉันเขียนสคริปต์ด้วยความตั้งใจว่าในเวลาต่อมาสคริปต์อื่น ๆ สามารถเรียกใช้ได้ (ซึ่งสามารถตรวจสอบรหัสทางออกที่ไม่เป็นศูนย์) ฉันยังไม่ได้ทำอย่างนั้นจริง ๆ ; จนถึงตอนนี้ฉันแค่เรียกใช้สคริปต์จากเชลล์เชิงโต้ตอบของฉัน (Bash) และฉันสงสัยว่าจะเกิดอะไรขึ้นหากใช้รหัสทางออกที่กำหนดเอง คำแนะนำจากคู่มือ Bash-Scripting ขั้นสูงมีความเกี่ยวข้อง / สำคัญเพียงใด ฉันไม่พบคำแนะนำการยืนยันใด ๆ ในเอกสาร Bash; ส่วนของมันที่สถานะการออกเพียงแค่แสดงรหัสทางออกที่ใช้โดย Bash แต่ไม่ได้ระบุว่าสิ่งเหล่านี้สงวนไว้หรือเตือนให้ใช้สำหรับสคริปต์ / โปรแกรมของคุณเอง

3
วางไข่ - ไม่พบคำสั่ง!
ฉันใช้ Mac OS X 10.9.4 ต่อไปนี้เป็นสคริปต์ของฉันเพื่อคัดลอกไฟล์จากเครื่องท้องถิ่นไปยังโฮสต์อื่น #!/bin/bash #!/usr/bin/expect echo "I will fail if you give junk values!!" echo " " echo "Enter file name: " read filePath echo " " echo "Where you want to copy?" echo "Enter" echo "1. if Host1" echo "2. if Host2" echo "3. if Host3" …

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