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

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

7
วิธี "เหมาะสม" เพื่อทดสอบว่าบริการกำลังทำงานอยู่ในสคริปต์หรือไม่
ปัญหาของฉัน: ฉันกำลังเขียนสคริปต์ทุบตีและในนั้นฉันต้องการตรวจสอบว่าบริการที่กำหนดทำงานอยู่หรือไม่ $ service [service_name] statusฉันรู้วิธีการทำด้วยตัวเองด้วย แต่ (โดยเฉพาะอย่างยิ่งตั้งแต่การย้ายไปยัง systemd) ที่พิมพ์ข้อความจำนวนมากที่ไม่ยุ่งยากในการแยกวิเคราะห์ ฉันสันนิษฐานว่ามีคำสั่งสำหรับสคริปต์ที่มีเอาต์พุตแบบง่ายหรือค่าส่งคืนที่ฉันสามารถตรวจสอบได้ แต่ Googling รอบ ๆ ให้ผลลัพธ์แบบ "โอ้เพียงแค่ps aux | grep -v grep | grep [service_name]" เท่านั้น นั่นเป็นวิธีปฏิบัติที่ดีที่สุดไม่ได้เหรอ? จะเกิดอะไรขึ้นถ้าอินสแตนซ์อื่นของคำสั่งนั้นกำลังทำงานอยู่ แต่ไม่ใช่สคริปต์ที่เริ่มต้นโดย SysV init หรือฉันควรปิดและทำให้มือสกปรกด้วย pgrep เล็กน้อย?

2
วงเล็บใส่คำสั่งลงใน subshell หรือไม่?
จากสิ่งที่ฉันได้อ่านการวางคำสั่งในวงเล็บควรเรียกใช้ใน subshell คล้ายกับการเรียกใช้สคริปต์ ถ้าเป็นจริงมันจะเห็นตัวแปร x ถ้า x ไม่ถูกส่งออกได้อย่างไร x=1 การรัน(echo $x)บนบรรทัดคำสั่งจะส่งผลให้ 1 การรันecho $xสคริปต์จะไม่ส่งผลอะไรตามที่คาดไว้

6
ฉันจะลบ n บรรทัดแรกของไฟล์ ascii โดยใช้คำสั่ง shell ได้อย่างไร
ฉันมีไฟล์หลายไฟล์ที่มีข้อมูลข้อความ ascii ใน 5-10 บรรทัดแรกตามด้วยข้อมูลเมทริกซ์ที่จัดเรียงอย่างดี ในเชลล์สคริปต์ฉันต้องการลบข้อความสองสามบรรทัดแรกเพื่อที่ฉันจะสามารถใช้ข้อมูลเมทริกซ์บริสุทธิ์ในโปรแกรมอื่น ฉันจะใช้คำสั่ง bash shell เพื่อทำสิ่งนี้ได้อย่างไร หากเป็นความช่วยเหลือใด ๆ ฉันใช้ RedHat และระบบ Ubuntu linux

4
ความคิดเห็น Multiline shell script - มันทำงานอย่างไร
เมื่อเร็ว ๆ นี้ฉันได้พบกับประเภทความคิดเห็นหลายบรรทัดที่ฉันไม่เคยเห็นมาก่อน - นี่คือตัวอย่างสคริปต์: echo a # : aaa : ddd # echo b ดูเหมือนว่าจะใช้งานได้แม้กระทั่งvimไวยากรณ์ - ไฮไลท์ รูปแบบการแสดงความคิดเห็นนี้เรียกว่าอะไรและฉันจะหาข้อมูลเพิ่มเติมเกี่ยวกับมันได้อย่างไร

18
ตรวจจับระบบ init โดยใช้เชลล์
สิ่งนี้อาจมีอะไรเพิ่มเติมเกี่ยวกับการตรวจจับระบบปฏิบัติการ แต่ฉันต้องการระบบเริ่มต้นที่ใช้อยู่ในระบบเป็นพิเศษ Fedora 15 และ Ubuntu ตอนนี้ใช้ systemd, Ubuntu เคยใช้ Upstart (เริ่มต้นนานจนถึง 15.04), ในขณะที่คนอื่นใช้รูปแบบของ System V ฉันมีแอปพลิเคชันที่ฉันเขียนเพื่อเป็นภูตข้ามแพลตฟอร์ม สคริปต์ init กำลังถูกสร้างแบบไดนามิกขึ้นอยู่กับพารามิเตอร์ที่สามารถส่งผ่านไปยังการกำหนดค่า สิ่งที่ฉันต้องการทำคือสร้างสคริปต์สำหรับระบบเริ่มต้นเฉพาะที่ใช้ วิธีนี้สคริปต์การติดตั้งสามารถรันได้อย่างสมเหตุสมผลโดยไม่มีพารามิเตอร์เนื่องจากรูทและ daemon สามารถ "ติดตั้ง" โดยอัตโนมัติ นี่คือสิ่งที่ฉันเกิดขึ้น: ค้นหา systemd, พุ่งพรวด, ฯลฯ ใน / bin เปรียบเทียบ / proc / 1 / comm กับ systemd, พุ่งพรวด, ฯลฯ ถามผู้ใช้ สิ่งที่จะเป็นวิธีที่ข้าม / แพลตฟอร์มที่ดีที่สุดในการทำเช่นนี้? ประเภทที่เกี่ยวข้องฉันสามารถพึ่งพาการทุบตีเป็นส่วนใหญ่ของ …

13
จะเปรียบเทียบสองวันในเชลล์ได้อย่างไร?
จะเปรียบเทียบสองวันในเชลล์ได้อย่างไร นี่คือตัวอย่างของวิธีที่ฉันต้องการใช้ถึงแม้ว่ามันจะไม่ทำงานตามที่เป็นอยู่: todate=2013-07-18 cond=2013-07-15 if [ $todate -ge $cond ]; then break fi ฉันจะบรรลุผลลัพธ์ที่ต้องการได้อย่างไร


9
จะไม่ทำสิ่งใดตลอดไปอย่างสง่างาม?
ผมมีโปรแกรมที่ก่อให้ข้อมูลที่เป็นประโยชน์ในแต่ยังอ่านจากstdout stdinฉันต้องการเปลี่ยนเส้นทางเอาต์พุตมาตรฐานไปยังไฟล์โดยไม่ต้องให้อะไรกับอินพุตมาตรฐาน จนถึงตอนนี้ดีมาก: ฉันทำได้: program > output และไม่ทำอะไรเลยใน tty อย่างไรก็ตามปัญหาคือฉันต้องการทำในพื้นหลัง ถ้าฉันทำ: program > output & โปรแกรมจะถูกระงับ ("ถูกระงับ (อินพุต tty)") ถ้าฉันทำ: program < /dev/null > output & โปรแกรมหยุดทำงานทันทีเนื่องจากถึง EOF ดูเหมือนว่าสิ่งที่ฉันต้องการก็คือการเข้าไปในท่อสิ่งที่ไม่ได้ทำอะไรสำหรับจำนวนเงินที่แน่นอนของเวลาและไม่ได้อ่านprogram stdinแนวทางต่อไปนี้ใช้ได้ผล: while true; do sleep 100; done | program > output & mkfifo fifo && cat fifo | program > output …

3
ตรวจสอบว่าไดเรกทอรีทำงาน Git สะอาดจากสคริปต์
ฉันมีสคริปต์ที่ทำงานrsyncกับไดเรกทอรีการทำงานของ Git เป็นปลายทาง ฉันต้องการให้สคริปต์มีพฤติกรรมที่แตกต่างกันไปขึ้นอยู่กับว่าไดเรกทอรีทำงานนั้นสะอาด (ไม่มีการเปลี่ยนแปลงที่จะกระทำ) หรือไม่ ตัวอย่างเช่นหากผลลัพธ์ของgit statusด้านล่างเป็นฉันต้องการสคริปต์เพื่อออก: git status Already up-to-date. # On branch master nothing to commit (working directory clean) Everything up-to-date หากไดเรกทอรีไม่สะอาดฉันก็อยากให้มันรันคำสั่งเพิ่มเติม ฉันจะตรวจสอบเอาต์พุตเช่นด้านบนในเชลล์สคริปต์ได้อย่างไร
82 shell-script  git 

3
มันหมายความว่าอะไรที่จะมี $“ ดอลลาร์ - นำหน้าสตริง” ในสคริปต์?
ฉันเพิ่งเห็นสิ่งนี้ในสคริปต์ init: echo $"Stopping Apache" เครื่องหมายดอลลาร์คืออะไร การวิจัยของฉันจนถึงขณะนี้: ฉันพบสิ่งนี้ในคู่มือทุบตี: extquote หากตั้งค่า$'string'และการ$"string"อ้างอิงจะดำเนินการภายในส่วน${parameter}ขยายที่อยู่ในเครื่องหมายคำพูดคู่ ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้น ... แต่ฉันไม่พบความแตกต่างระหว่างสตริงที่มีและไม่มีส่วน$นำหน้า: $ echo "I am in $PWD" I am in /var/shared/home/southworth/qed $ echo $"I am in $PWD" I am in /var/shared/home/southworth/qed $ echo $"I am in ${PWD}" I am in /var/shared/home/southworth/qed $ echo "I am in ${PWD}" I …

2
ทำไมรูปแบบ“ คำสั่ง || จริง” มีประโยชน์หรือไม่
ขณะนี้ฉันกำลังสำรวจแพ็คเกจ Debian และฉันได้อ่านตัวอย่างโค้ดแล้ว และในทุกบรรทัดตัวอย่างpostinstสคริปต์เป็นรูปแบบ some command || true another command || true ดังนั้นหากคำสั่งบางตัวล้มเหลวบรรทัดจะส่งกลับค่าจริง แต่ฉันไม่เห็นว่าสิ่งนี้จะส่งผลกระทบต่อผลลัพธ์ของโปรแกรมอย่างไร

5
ฉันจะทราบได้อย่างไรว่ามีการติดตั้งแพคเกจผ่าน yum ใน bash script หรือไม่
ฉันพยายามเขียนสคริปต์ที่ติดตั้งแพคเกจ แต่ถ้ามันล้มเหลว ณ จุดใด ๆ ในสคริปต์ย้อนกลับสิ่งที่มันติดตั้ง แน่นอนว่าหากผู้ใช้ติดตั้งแพคเกจไว้ก่อนหน้านี้แล้วฉันไม่ต้องการถอนการติดตั้งออกมาจากใต้แพ็คเกจ สคริปต์ของฉันจะทราบได้อย่างไรว่ามีการติดตั้งแพคเกจก่อนหน้านี้ผ่าน yum หรือไม่

7
ฉันมีกระสุนจำนวนเท่าไร
ปัญหา : ค้นหาว่าฉันมีกระสุนจำนวนเท่าไร รายละเอียด : ฉันเปิดเปลือกจากกลุ่มมาก สร้างและเรียกใช้และออกจาก บางครั้งฉันลืมและเปิดเสียงเรียกเข้าภายในจากนั้นก็อีกเปลือก :( ฉันอยากรู้ว่าฉันอยู่ลึกเท่าไรในเปลือกหอยฉันอาจจะมีมันบนหน้าจอเชลล์ของฉันตลอดเวลา (ฉันสามารถจัดการส่วนนั้น) โซลูชันของฉัน : แยกแผนผังกระบวนการและมองหา vim และ bash / zsh และค้นหาความลึกของกระบวนการปัจจุบันที่อยู่ภายใน มีบางอย่างเช่นนั้นที่มีอยู่แล้วหรือไม่? ฉันหาอะไรไม่เจอ
73 bash  shell-script  shell  vim  zsh 


4
แก้ไขหรือทางเลือกสำหรับ mktemp ใน OS X
ฉันกำลังดูสคริปต์ทุบตีคนอื่นเขียนว่าใช้mktemp: TEMP=`mktemp --directory` อย่างไรก็ตามบรรทัดนี้ใช้ไม่ได้กับเครื่องของฉัน (OS X 10.6) ฉันจะแก้ไขบรรทัดนี้เพื่อให้เข้ากันได้กับ cross-un * x-like-platform ได้อย่างไร แก้ไข:คำสั่งทางเลือกจะเพียงพอเช่นกัน

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