sh sys-snap.sh &
คือshอะไร คือsys-snap.shอะไร ทำไมฉันถึงต้องวางไว้&ที่ท้ายบรรทัด? ทุกคนสามารถอธิบายไวยากรณ์ได้หรือไม่
โดยไม่ต้อง&สคริปต์ที่จะไม่กลับไปที่พรอมต์จนฉันกด+Ctrl Cด้วย&ฉันสามารถกด Enter และใช้งานได้
sh sys-snap.sh &
คือshอะไร คือsys-snap.shอะไร ทำไมฉันถึงต้องวางไว้&ที่ท้ายบรรทัด? ทุกคนสามารถอธิบายไวยากรณ์ได้หรือไม่
โดยไม่ต้อง&สคริปต์ที่จะไม่กลับไปที่พรอมต์จนฉันกด+Ctrl Cด้วย&ฉันสามารถกด Enter และใช้งานได้
คำตอบ:
shเป็นเชลล์เริ่มต้นที่เข้ากันได้กับ Bourne (โดยปกติแล้วจะเป็น bash หรือ dash)
sys-snap.shเป็นเชลล์สคริปต์ซึ่งมีคำสั่งที่shดำเนินการ เมื่อคุณไม่โพสต์เนื้อหาฉันสามารถเดาได้จากชื่อของมันคืออะไร ฉันสามารถค้นหาสคริปต์ที่เกี่ยวข้องกับ CPanel ด้วยชื่อไฟล์เดียวกันที่สร้างล็อกไฟล์ด้วยกระบวนการปัจจุบันทั้งหมดการใช้หน่วยความจำปัจจุบันสถานะฐานข้อมูล ฯลฯ หากสคริปต์เริ่มต้นด้วยบรรทัด Shebang ( #!/bin/shหรือคล้ายกัน) คุณสามารถทำให้สามารถเรียกใช้งานได้ ด้วยchmod +x sys-snap.shและเริ่มต้นโดยตรงโดยใช้./sys-snap.shถ้ามันอยู่ในไดเรกทอรีปัจจุบัน
เมื่อ&กระบวนการเริ่มต้นในพื้นหลังดังนั้นคุณสามารถใช้เชลล์ต่อไปและไม่ต้องรอจนกว่าสคริปต์จะเสร็จสิ้น หากคุณลืมคุณสามารถหยุดกระบวนการทำงานปัจจุบันด้วยCtrl-Zและดำเนินการต่อในพื้นหลังด้วย bg(หรือในเบื้องหน้าด้วยfg) สำหรับข้อมูลเพิ่มเติมดูการควบคุมงาน
shมักจะมีเพียงในbashหรือdashในระบบ Linux (หรือล่าสุด OS / X) ตาม ใน BSD นั้นโดยปกติแล้วจะแตกต่างจาก Ash (เส้นประขึ้นอยู่กับ NetBSD sh ตัวเองตาม Almquist Shell) หรืออนุพันธ์ pdksh ใน Unices เชิงพาณิชย์ทั่วไปคือ ksh88
&ดังนั้นในพื้นหลังคุณจะได้รับพรอมต์เชลล์ใหม่เท่านั้น
&&ต่างจากแอมเปอร์แซนด์เดี่ยว&หรือไม่
เรื่องนี้เป็นที่รู้จักกันในนามjob controlยูนิกซ์ &แจ้งเปลือกที่จะนำคำสั่งในพื้นหลัง นี่หมายความว่ามันยังคงรันsys-snap.shคำสั่ง แต่ส่งคุณกลับไปที่เชลล์เพื่อให้คุณทำคำสั่งแบบขนานต่อไป
คุณสามารถดูรายการงานที่กำลังรันด้วยjobsคำสั่ง คุณสามารถกลับไปที่คำสั่ง (นำมาที่หน้า ') ด้วยการใช้fgคำสั่ง ซึ่งดึงคำสั่งกลับสู่สถานะที่คุณไม่เห็นพรอมต์และคุณต้องออกCtrl- Cเพื่อฆ่ากระบวนการ แต่คุณสามารถระงับ (หยุด) กระบวนการที่ออก-Ctrl Zการดำเนินการนี้จะหยุดชั่วคราวsys-snap.shและกลับสู่พรอมต์ของคุณ จากนั้นคุณสามารถพื้นหลัง (รวมแม้ว่าคุณจะได้ออกมันมี& ) กับbgคำสั่งและมันจะกลับมาวิ่งออกมาจากมันหยุดชั่วคราวรัฐCtrl- Zได้ใส่ไว้ใน
โปรดทราบว่าคุณสามารถมีงานได้มากกว่าหนึ่งงานในแต่ละครั้ง (ดังที่แสดงโดยjobs):
[1]- Running sys-snap.sh &
[2]+ Running another-script.sh &
คุณสามารถพื้นหลังและเบื้องหน้าพวกเขาโดยใช้หมายเลขงานของพวกเขา%1จะเป็นsys-snap.shและจะเป็น%2 another-script.shหากคุณใช้fgหรือbgไม่ใช้อาร์กิวเมนต์มันจะดำเนินการคำสั่งในงานที่ทำเครื่องหมายโดย+ในjobsผลลัพธ์ด้านบน
fg %1
จะใส่sys-snap.shกลับไปที่พื้นหน้าในขณะที่ทิ้งไว้another-script.shในพื้นหลัง
คุณสามารถออกCtrl- Cลำดับการดำเนินงานได้โดยไม่ต้องเบื้องหน้าพวกเขาด้วยkillคำสั่งkill %1จะส่งเทียบเท่าของCtrl- ไปCsys-snap.sh
หากคุณกำลังใช้ bash shell man bashคำสั่งจะมีส่วนที่มีรายละเอียดอยู่ภายใต้หัวข้อ 'JOB CONTROL' เพื่อดูรายละเอียดเพิ่มเติม
สำหรับชื่อsys-snap.shภายใต้ชื่อไฟล์ unix นั้นเป็นกฎเกณฑ์ (โดยมีข้อยกเว้นสองสามประการเช่นไฟล์ตัวโหลดแบบไดนามิก) ไม่มีข้อกำหนดสำหรับพวกเขาที่จะมีขอบเขตไฟล์ที่เฉพาะเจาะจงเพื่อให้พวกเขาทำงานเป็นเชลล์สคริปต์เรียกคำสั่งอื่น ๆ เช่นperlหรือphpอื่น ๆ มันมักจะใช้เพื่อให้ความชัดเจนว่าในกรณีนี้มันเป็น.shเชลล์สคริปต์โดยใช้บอร์นเชลล์/bin/sh.
ส่วนการทำงานของsys-snap.sh(เมื่อคุณดูที่เนื้อหาของมันมีบางสิ่งบางอย่างเช่นlessคำสั่ง) เป็นshebang ในบรรทัดแรกคุณอาจพบหนึ่งใน:
#! /bin/sh
#! /bin/bash
#! /usr/local/bin/bash
หรือคล้ายกัน โดยพื้นฐานแล้วคำสั่งหลังจากนั้น#!(เช่น/bin/sh) จะถูกรันและเนื้อหาของไฟล์สคริปต์ที่เหลือจะถูกป้อนเข้าบรรทัดในแต่ละครั้ง โปรดทราบว่าไฟล์จะต้องตั้งค่าปฏิบัติการด้วยchmodเพื่อให้คุณสามารถเรียกใช้เป็นคำสั่ง หากไม่ได้ตั้งค่าการอนุญาตสิทธิ์จะshebangไม่มีผลเพราะคุณอาจได้รับข้อผิดพลาด:
bash: sys-snap.sh: command not found
หรือถ้าคุณวิ่งตามเส้นทางที่ชัดเจน./sys-snap.sh( .หมายถึงไดเรกทอรีการทำงานปัจจุบัน) คุณจะได้รับ:
bash: ./sys-snap.sh: Permission denied
อีกทางเลือกหนึ่งคือปล่อยไว้โดยไม่มีการอนุญาตและขอให้ / bin / sh เรียกใช้อย่างชัดเจน:
/bin/sh sys-snap.sh &
nohupทำเช่นนั้นบ่อยครั้งที่มันใช้ร่วมกับ&เพื่อเริ่มกระบวนการและสามารถฆ่าเชลล์ที่เปิดใช้โดยไม่ฆ่ากระบวนการ
jobsจะว่างเปล่าเสมอถ้ามันเป็นคำสั่งแรก
&คำสั่งที่ส่วนท้ายของคำสั่งจะแยกเฉพาะstdin(แต่ไม่ใช่stdoutหรือstderr) ซึ่งหมายถึงว่าคำสั่ง / สคริปต์ของคุณกำลังทำงานในพื้นหลัง แต่เขียนถึงstdoutคุณอาจทำงานในสถานการณ์ที่Ctrl + cจะไม่หยุดเอาต์พุต แต่คุณจะสามารถ เพื่อพิมพ์คำสั่ง นี่เป็นเพราะกระบวนการพื้นหลังกำลังเขียนถึงstdoutแต่คุณไม่สามารถหยุดได้เพราะมันไม่ได้ทำงานในเบื้องหน้า ข้อมูลเพิ่มเติมที่นี่
shเป็นเปลือก เปลือกใดขึ้นอยู่กับระบบ ตัวอย่างสำหรับระบบที่ใช้bashเป็นเชลล์มาตรฐาน:
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 13 16:12 /bin/sh -> bash
$ sh --version
GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)
sys-snap.shจะเป็นเชลล์สคริปต์บางชนิดดังนั้นsh sys-snap.shจะรันเชลล์สคริปต์
&จะทำให้กระบวนการเชลล์ทำงานในพื้นหลัง หากไม่มี&มันจะอยู่ในเบื้องหน้าจนกว่าสคริปต์จะจบ สคริปต์ทำงานได้ทั้งสองวิธีมันเป็นเพียงคำถามที่รอให้สคริปต์หยุดทำงานหรือไม่ก่อนที่จะดำเนินการคำสั่งเพิ่มเติม
เซิร์ฟเวอร์ของคุณอยู่ใน hostgator หรือไม่?
สคริปต์sys-snap.shเป็นสคริปต์พิเศษที่เขียนโดยทีมงานโฮสต์เพื่อรวบรวมไฟล์บันทึกและข้อมูลทั้งหมดสำหรับระบบดังนั้นจึงใช้เอาต์พุตในการตรวจสอบและรวบรวมข้อมูลระบบ
&&ต่างจากแอมเปอร์แซนด์เดี่ยว&หรือไม่