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
เป็นสคริปต์พิเศษที่เขียนโดยทีมงานโฮสต์เพื่อรวบรวมไฟล์บันทึกและข้อมูลทั้งหมดสำหรับระบบดังนั้นจึงใช้เอาต์พุตในการตรวจสอบและรวบรวมข้อมูลระบบ
&&
ต่างจากแอมเปอร์แซนด์เดี่ยว&
หรือไม่