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

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

3
กฎสำหรับเรียกใช้ subshell ใน Bash?
ฉันดูเหมือนจะเข้าใจผิดกฎของ Bash ในการสร้าง subshell ฉันคิดว่าวงเล็บจะสร้าง subshell เสมอซึ่งจะทำงานเหมือนกระบวนการของตัวเอง อย่างไรก็ตามนี่ไม่ใช่กรณี ใน Code Snippet A (ด้านล่าง) sleepคำสั่งที่สองไม่ได้ทำงานในเชลล์แยกต่างหาก (ตามที่กำหนดโดยpstreeเทอร์มินัลอื่น) อย่างไรก็ตามใน Code Snippet B sleepคำสั่งที่สองจะทำงานในเชลล์แยกต่างหาก ความแตกต่างเพียงอย่างเดียวระหว่างตัวอย่างก็คือตัวอย่างที่สองมีสองคำสั่งภายในวงเล็บ มีใครบ้างที่โปรดอธิบายกฎสำหรับตอนที่สร้าง subshells รหัส SNIPET A: sleep 5 ( sleep 5 ) รหัส SNIPET B: sleep 5 ( x=1 sleep 5 )

3
ขึ้นบรรทัดใหม่ในชื่อไฟล์
ฉันเข้าใจและยอมรับหลักฐานว่าการเขียนสคริปต์เชลล์1 แบบป้องกันเป็นเรื่องที่รอบคอบและในระยะยาวจะมีความยั่งยืนมากขึ้น คำตอบมากมายสำหรับคำถามเกี่ยวกับการประมวลผลข้อความที่นี่เป็นไปตามหลักการนี้โดยสร้างเป็นคำตอบที่อาจเกิดขึ้นสำหรับชื่อไฟล์นอกรีต ที่อาจมีช่องว่างขีดกลางและบรรทัดใหม่ บรรทัดใหม่ที่แพร่หลายในชื่อไฟล์เป็นอย่างไร โดยเฉพาะ: แอปพลิเคชันใด ๆ ที่สร้างชื่อไฟล์ที่มีบรรทัดใหม่เป็นค่าเริ่มต้นหรือไม่ มีสถานการณ์ใดบ้างที่ต้องการสร้างชื่อไฟล์ดังกล่าว หรือพวกเขาส่วนใหญ่เป็นตัวอย่างของข้อผิดพลาดของผู้ใช้? [1] ความหมายการวางแผนและการจัดการสถานการณ์และภาระผูกพันที่เป็นไปได้ในวงกว้างที่สุด ... คำถามที่ได้รับแรงบันดาลใจจากความคิดเห็น (ค่อนข้างน่าตำหนิ) ในคำถามนี้

6
คำนวณการย่อยหลายรายการพร้อมกัน (md5, sha256) พร้อมกันไหม
ภายใต้สมมติฐานว่าดิสก์ I / O และ RAM ว่างเป็นคอขวด (ในขณะที่เวลาของ CPU ไม่ จำกัด ) เครื่องมือมีอยู่ที่สามารถคำนวณการย่อยข้อความได้หลายข้อความพร้อมกันหรือไม่? ฉันสนใจเป็นพิเศษในการคำนวณการแยกย่อยของไฟล์ขนาดใหญ่ MD-5 และ SHA-256 (ขนาดเป็นกิกะไบต์) โดยเฉพาะอย่างยิ่งในแบบคู่ขนาน ฉันได้ลองopenssl dgst -sha256 -md5แล้ว แต่มันจะคำนวณแฮชโดยใช้อัลกอริทึมเดียวเท่านั้น รหัสหลอกสำหรับพฤติกรรมที่คาดหวัง: for each block: for each algorithm: hash_state[algorithm].update(block) for each algorithm: print algorithm, hash_state[algorithm].final_hash()

3
แตกต่างแสดงบรรทัดที่แก้ไขจากไฟล์ที่ถูกต้องเท่านั้น
ฉันมีไฟล์aและbและผมอยากจะสายออกของที่มีการเปลี่ยนแปลงตั้งแต่มันถูกโคลนจากb aเพียงแค่บรรทัดที่แก้ไขไม่มีบริบทโดยรอบไม่มีเครื่องหมายตรงข้ามที่ต่างกัน ฉันจะทำสิ่งนั้นโดยใช้เชลล์สคริปต์ได้อย่างไร (ไม่มี Python / Perl / PHP / ... ) Sed และ awk เป็นคำตอบที่ยอมรับได้ สำหรับตอนนี้สิ่งที่ฉันกำลังทำคือ diff -y กับ - suppress-common-lines และ sed โดยใช้การอ้างอิงย้อนกลับของ regex เพื่อดึงส่วนที่ถูกต้องหลังจากช่องว่าง จะต้องมีวิธีที่ดีกว่า ใช้ perl (ซึ่งเป็นสิ่งต้องห้าม) ฉันจะทำสิ่งนี้: diff -y --suppress-common-lines -W $COLUMNS Eclipse_Preferences_Export_*.epf | perl -pe 's/.*\t|\t(.*)$/\1/g'
24 shell-script  sed  awk  diff 

2
กู้คืนไฟล์ที่ถูกลบบน Mac โดยบรรทัดคำสั่ง
ฉันเผลอลบไฟล์โดยใช้: rm -rf ./Desktop/myScript.sh ฉันคิดว่าเป็นไปได้ในการกู้คืนไฟล์เนื่องจากrmคำสั่งจะลบชั่วคราว ฉันจะกู้คืนไฟล์ที่ถูกลบใน Mac OSX ได้อย่างไร?

4
เรียกใช้คำสั่งหลังจากผ่านไประยะเวลาหนึ่งหรือไม่
หากฉันกำลังดำเนินการกระบวนการที่ยาวนานจะมีวิธีใดบ้างที่ฉันสามารถเรียกใช้คำสั่งตามเวลาได้? ตัวอย่างเช่นฉันใช้กระบวนการที่ยาวมาก ๆ ซึ่งใช้เวลาประมาณ 10 นาที หลังจาก 5 นาทีฉันต้องการเรียกใช้คำสั่งแยกต่างหาก สำหรับภาพประกอบคำสั่งแยกอาจเป็น:echo 5 minutes complete (หมายเหตุ: ฉันไม่ต้องการความคืบหน้าไปสู่ความสมบูรณ์ของคำสั่ง แต่เพียงคำสั่งดำเนินการหลังจากช่วงเวลาที่ระบุ) มันเป็นไปได้?

3
ตัวดำเนินการเชิงตรรกะหลายตัว ((A || B) && C) และ“ ข้อผิดพลาดทางไวยากรณ์ใกล้โทเค็นที่ไม่คาดคิด”
ฉันทำงานกับ Bash 3 และฉันพยายามสร้างเงื่อนไข ใน C / C ++ มันง่ายที่ตายแล้ว: ((A || B) && C). ใน Bash มันไม่เป็นเช่นนั้น (ฉันคิดว่าผู้แต่ง Git ต้องมีส่วนร่วมในรหัสนี้ก่อนที่จะย้ายไปสู่ความพยายามอื่น ๆ ) สิ่งนี้ใช้ไม่ได้ โปรดทราบว่า<0 or 1>ไม่ใช่ตัวอักษรสตริง; มันหมายถึง 0 หรือ 1 (โดยทั่วไปมาจากgrep -i) A=<0 or 1> B=<0 or 1> C=<0 or 1> if [ [ "$A" -eq "0" ] || …

4
sed ด้วยการแสดงออกหลายสำหรับการโต้แย้งในสถานที่
ฉันพยายามแทนที่คำหลายคำในไฟล์โดยใช้ sed -i #expression1 #expression2 ไฟล์ Something 123 item1 Something 456 item2 Something 768 item3 Something 353 item4 เอาท์พุท (ที่ต้องการ) anything 123 stuff1 anything 456 stuff2 anything 768 stuff3 anything 353 stuff4 ลองลึกหนาบาง ฉันจะได้รับผลลัพธ์ต่อไปนี้โดยใช้sed -i2 ครั้ง sed -i 's/Some/any/g' file sed -i 's/item/stuff/g' file ฉันสามารถมีวิธีที่เป็นไปได้ในการทำให้สิ่งนี้เป็นคำสั่งแบบแทนที่เดียวได้ไหม sed -i 's/Some/any/g' -i 's/item/stuff/g' …

3
วิธีการตรวจสอบว่าพอร์ตเฉพาะเปิดอยู่บนเครื่องจากเชลล์สคริปต์และดำเนินการตามนั้น
ฉันใช้เชลล์สคริปต์ด้านล่างของฉันบนเครื่องที่เซิร์ฟเวอร์แอ็พพลิเคชัน c ++ กำลังรันบนพอร์ต 8080 และในเชลล์สคริปต์ฉันกำลังเรียกใช้ URL และเก็บการตอบสนองที่มาจาก URL นั้นในตัวแปร DATA แต่สมมติว่าเซิร์ฟเวอร์แอปเดียวกันหยุดทำงานแล้วจะไม่สามารถเรียกใช้ URL และจะพิมพ์ออกมาRetrying Againและพักเป็นเวลา 30 วินาทีจากนั้นเรียกใช้ URL เดิมอีกครั้ง #!/bin/bash HOSTNAME=$hostname DATA="" RETRY=15 echo $HOSTNAME while [ $RETRY -gt 0 ] do DATA=$(wget -O - -q -t 1 http://$HOSTNAME:8080/beat) if [ $? -eq 0 ] then break else echo "Retrying …

8
เพิ่มบรรทัดไปยังจุดเริ่มต้นและจุดสิ้นสุดของไฟล์ขนาดใหญ่
ฉันมีสถานการณ์ที่จะเพิ่มบรรทัดในจุดเริ่มต้นและจุดสิ้นสุดของไฟล์ขนาดใหญ่ ฉันลองแล้วตามที่แสดงด้านล่าง สำหรับบรรทัดแรก: sed -i '1i\'"$FirstLine" $Filename สำหรับบรรทัดสุดท้าย: sed -i '$ a\'"$Lastline" $Filename แต่ปัญหาของคำสั่งนี้คือการผนวกบรรทัดแรกของไฟล์และทำการข้ามทั้งไฟล์ สำหรับบรรทัดสุดท้ายมันจะข้ามไฟล์ทั้งหมดอีกครั้งและต่อท้ายบรรทัดสุดท้าย เนื่องจากไฟล์มีขนาดใหญ่มาก (14GB) สิ่งนี้ใช้เวลานานมาก ฉันจะเพิ่มบรรทัดไปยังจุดเริ่มต้นและอีกบรรทัดในตอนท้ายของไฟล์ขณะอ่านไฟล์เพียงครั้งเดียว

7
ข้อความระหว่างสองแท็ก
ฉันต้องการดึงสิ่งที่อยู่ระหว่างแท็กสองแท็กเหล่านี้<tr> </tr>- จากเอกสาร html ตอนนี้ฉันไม่มีข้อกำหนด html เฉพาะใด ๆ ที่จะรับประกันการแยกวิเคราะห์ html ฉันเพียงแค่ต้องการสิ่งธรรมดาที่การแข่งขัน<tr>และ</tr>และได้รับทุกอย่างในระหว่างและอาจจะมีหลายtrs ฉันลอง awk ซึ่งใช้งานได้ แต่ด้วยเหตุผลบางอย่างมันทำให้ฉันซ้ำซ้อนของแต่ละแถวที่แยกออกมา awk ' /<TR/{p=1; s=$0} p && /<\/TR>/{print $0 FS s; s=""; p=0} p' htmlfile> newfile จะไปเกี่ยวกับเรื่องนี้ได้อย่างไร

1
หนึ่งคำสั่ง systemctl เพื่อเริ่มและเปิดใช้งาน
การใช้หนึ่งคำสั่งเพื่อเริ่มและเปิดใช้systemctlงานซอฟต์แวร์ที่มีการจัดการจะมีประโยชน์ในการสำรองบางบรรทัดในสคริปต์ไม่กี่ทำให้พวกเขามีความสวยงามมากขึ้นเล็กน้อย (ไม่ใช่ปัญหาจริงๆ แต่เป็นสิ่งที่ดีที่จะมี) มีsystemctlคำสั่งเดียวสำหรับทั้งสองstartและenableโปรแกรมที่ควบคุมโดยsystemctl?

4
สร้างไฟล์จำนวนมากที่มีเนื้อหาแบบสุ่ม
ฉันกำลังมองหาคำสั่งเพื่อสร้างไฟล์ (หลายพัน) ไฟล์ที่มีข้อมูลสุ่มอย่างน้อย 1KB ตัวอย่างเช่น, Name size file1.01 2K file2.02 3K file3.03 5K etc. ฉันจะสร้างไฟล์จำนวนมากเช่นนี้ได้อย่างไร

8
การซ่อนรหัสผ่านในเชลล์สคริปต์
ฉันจะซ่อนรหัสผ่านในเชลล์สคริปต์ได้อย่างไร มีสคริปต์จำนวนหนึ่งที่เข้าถึงฐานข้อมูล ถ้าเราเปิดสคริปต์อื่น ๆ ก็ตระหนักถึงชื่อผู้ใช้และรหัสผ่าน ดังนั้นหากใครรู้วิธีการซ่อนโปรดแจ้งให้เราทราบ ฉันมีวิธีเดียว: วางรหัสผ่านในไฟล์และทำให้ไฟล์นั้นถูกซ่อนและไม่มีใครเข้าถึงไฟล์ได้ (เปลี่ยนการอนุญาตและใช้ไฟล์ในสคริปต์ขณะกำลังเข้าถึงฐานข้อมูล)

6
วิธีรับการตอบกลับจาก URL ใด ๆ
ฉันถูกขอให้เขียนเชลล์สคริปต์เพื่อตรวจสอบว่า URL เป็น UP / ทำงานหรือไม่สำหรับโครงการของฉัน ฉันพยายามค้นหาคำแนะนำทางอินเทอร์เน็ต แต่สิ่งที่ฉันได้รับคือการตรวจสอบว่ามี URL อยู่หรือไม่ wgetครั้งแรกที่ผมพยายามกับ wget -S --spider https://genesis-dev.webbank.ssmb.com:21589/gop-ui/app.jsp 2>&1 | awk '/^ /' if [ $? -ne 0 ] then echo "Server is UP" else echo "Server is down" fi curlพยายามต่อไปของฉันอยู่กับ curl -ivs https://genesis-dev.webbank.ssmb.com:21589/opconsole-sit/opconsole.html# if [ $? -ne 0 ] then echo "Server …

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