คำถามติดแท็ก scripting

สคริปต์คือลำดับของคำสั่งหรือคำสั่งที่ดำเนินการโดยโปรแกรมล่ามแทนที่จะรวบรวมเป็นโปรแกรมปฏิบัติการแบบสแตนด์อโลน

1
วิธีการย้ายไดเรกทอรีไฟล์โดยไฟล์? (แทน“ คัดลอกแล้วลบ”)
คอมพิวเตอร์ของฉันมีไดรฟ์ 500GB หนึ่งตัว ฉันต้องการที่จะย้าย 400GB ของข้อมูลจากการ/unencrypted/encrypted ทั้งสองไดเร็กทอรีอยู่ในพาร์ติชันเดียวกัน แต่/encryptedจัดการโดยecryptfsดังนั้นmv /uncrypted/* /encryptedจะ: คัดลอกไฟล์ทั้งหมดไปยังปลายทาง จากนั้นลบออกจากแหล่งที่มา ... ซึ่งฉันไม่สามารถจ่ายได้เพราะต้องใช้ 800GB หากไฟล์ถูกย้ายแบบหนึ่งต่อหนึ่งจะไม่มีปัญหา (โซน ecryptfs เป็นแบบไดนามิก) มีmvตัวเลือกหรือเครื่องมืออื่นที่ย้ายไดเรคทอรีไฟล์ต่อไฟล์หรือไม่? มีไฟล์จำนวนมากดังนั้น ARG_MAX อาจเป็นปัญหาสำหรับโซลูชันที่ใช้สคริปต์

8
คำสั่งประวัติภายในสคริปต์ทุบตี
ประวัติเป็นคำสั่งในตัวเชลล์ฉันไม่สามารถใช้สิ่งนั้นได้ในสคริปต์ BASH ดังนั้นมีวิธีการนี้โดยใช้สคริปต์ทุบตี? ที่นี่เราไปสคริปต์ของฉันสำหรับคุณ: #!/bin/bash history | tail -100 > /tmp/history.log cd /tmp uuencode history.log history.txt | mail -s "History log of server" hello@hel.com

3
จดชวเลขเพื่อป้อนเนื้อหาของไฟล์หลาย ๆ ไฟล์ไปยัง stdin ของสคริปต์
สมมติว่าฉันมีสคริปต์ที่เรียกscriptว่าอ่านstdinและแยกผลลัพธ์ไปที่หน้าจอ ถ้าฉันต้องการที่จะเลี้ยงเนื้อหาของไฟล์เดียวฉันจะพิมพ์: $ ./script < file1.txt แต่ถ้าฉันต้องการป้อนเนื้อหาของไฟล์หลาย ๆ ไฟล์ลงในสคริปต์ด้วยวิธีเดียวกันมันจะเป็นไปได้หรือไม่? สิ่งที่ดีที่สุดที่ฉันเคยได้รับคือ: cat file1.txt file2.txt > combined.txt && ./script < combined.txt ซึ่งใช้สองคำสั่งและสร้างไฟล์ชั่วคราว มีวิธีการทำสิ่งเดียวกัน แต่ข้ามการสร้างไฟล์รวม?

8
เร็วกว่า ping เพื่อตรวจสอบว่าคอมพิวเตอร์ออนไลน์หรือไม่
ฉันกำลังเขียนสคริปต์แลนสำหรับชุดคอมพิวเตอร์แล็บของเรา เรามี sqlite db ที่มีรายชื่อโฮสต์คอมพิวเตอร์, IP และ MAC และตอนนี้ฉัน ping แต่ละรายการด้วย '-c1' ดังนั้นมันจึงไม่ทำงานอย่างไม่มีที่สิ้นสุด - แต่แม้จะต้องรอสักพักก็มีวิธีที่เร็วกว่าในการรับ ตอบแทนที่จะปิง การใช้ ping ดูเหมือนจะทำให้สคริปต์ช้าลงเล็กน้อยเนื่องจากต้องการคำตอบ ping เพื่อดำเนินการต่อ ขอบคุณมากสำหรับคำแนะนำใด ๆ !

6
วิธีการจับข้อผิดพลาดจากคำสั่งดำเนินการ?
ฉันได้รับมอบหมายให้สร้างสคริปต์การทำให้เซิร์ฟเวอร์แข็งโดยอัตโนมัติและสิ่งหนึ่งที่พวกเขาต้องการก็คือรายงานของเอาต์พุตทั้งหมดของแต่ละคำสั่งที่เรียกใช้งาน ฉันต้องการเก็บข้อความแสดงข้อผิดพลาดภายในสตริงและต่อท้ายในไฟล์ข้อความ สมมติว่าฉันรันคำสั่งนี้: /sbin/modprobe -n -v hfsplus ผลลัพธ์ของการทำงานในเครื่องของฉันจะเป็น: FATAL: Module hfsplus not found ฉันจะเก็บข้อความแสดงข้อผิดพลาดนั้นไว้ในสตริงได้อย่างไร? ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก. ขอบคุณ!
20 bash  scripting  string 

2
วิธียกเลิกคำสั่ง Linux โดยไม่ทำลายแอปพลิเคชันที่ได้รับ
ฉันมีสคริปต์ทุบตีที่ทำงานตราบใดที่เครื่อง Linux เปิดอยู่ ฉันเริ่มมันดังแสดงด้านล่าง: ( /mnt/apps/start.sh 2>&1 | tee /tmp/nginx/debug_log.log ) & หลังจาก lauches ฉันสามารถดูคำสั่ง tee ในเอาต์พุตpsของฉันได้ดังแสดงด้านล่าง $ ps | grep tee 418 root 0:02 tee /tmp/nginx/debug_log.log 3557 root 0:00 grep tee ฉันมีฟังก์ชั่นที่ตรวจสอบขนาดของบันทึกที่teeสร้างและฆ่าคำสั่งteeเมื่อบันทึกถึงขนาดที่แน่นอน: monitor_debug_log_size() { ## Monitor the file size of the debug log to make sure it does not …
19 linux  scripting  pipe  kill  tee 

8
มีเชลล์ที่ตรวจสอบเพื่อให้แน่ใจว่ารหัสถูกเซ็นชื่อหรือไม่?
ฉันยุ่งกับ PowerShell ในสัปดาห์นี้และพบว่าคุณต้องลงชื่อสคริปต์ของคุณเพื่อให้สามารถทำงานได้ มีฟังก์ชั่นความปลอดภัยที่คล้ายกันใน Linux ที่เกี่ยวข้องกับการป้องกันสคริปต์ bash ไม่ให้ทำงานหรือไม่? ฟังก์ชั่นเดียวที่คล้ายกับสิ่งนี้ที่ฉันรู้ว่าเป็นของ SSH ที่ต้องการรหัสบางอย่าง

4
ฉันจะใช้การไหลเวียนของข้อมูลแบบวงกลมในคำสั่งที่เชื่อมต่อระหว่างกันได้อย่างไร
ฉันรู้ว่ามีสองประเภทวิธีที่คำสั่งสามารถเชื่อมต่อซึ่งกันและกัน: โดยใช้ Pipe (วาง std-output ลงใน std-input ของคำสั่งถัดไป) โดยใช้ Tee (แบ่งเอาต์พุตเป็นเอาต์พุตจำนวนมาก) ฉันไม่ทราบว่านั่นคือทั้งหมดที่เป็นไปได้หรือไม่ดังนั้นฉันวาดประเภทการเชื่อมต่อสมมุติ: เป็นไปได้อย่างไรที่จะใช้การไหลเวียนของข้อมูลระหว่างคำสั่งเช่นในรหัสเทียมนี้ซึ่งฉันใช้ตัวแปรแทนคำสั่ง: pseudo-code: a = 1 # start condition repeat { b = tripple(a) c = sin(b) a = c + 1 }

4
bash -e ออกเมื่อให้หรือ expr ประเมินเป็น 0
ฉันมี bash script ที่ตั้งค่า -e ดังนั้นสคริปต์จะออกจากสถานะการออกใด ๆ ! = 0 ฉันพยายามทำเลขคณิตพื้นฐานของเชลล์ที่กำหนดให้กับตัวแปรและบางครั้งนิพจน์มีค่าเท่ากับ 0 ซึ่งทำให้สถานะการออกของคำสั่ง let หรือ expr เป็น "1" นี่คือตัวอย่าง: #!/bin/bash -ex echo "Test 1" Z=`expr 1 - 1` || true echo "Z will print" let "A=4 - 4" echo "A WILL NEVER PRINT $A" Y=`expr 1 - 1` echo "Y …

6
ใช้คำสั่งกับไฟล์จำนวนมาก
ฉันมีโฟลเดอร์ที่มีไฟล์จำนวนมาก (xyz1, xyz2 ไปจนถึง xyz5025) และฉันต้องเรียกใช้สคริปต์ในทุก ๆ ไฟล์รับ xyz1.faa, xyz2.faa และอื่น ๆ คำสั่งสำหรับไฟล์เดียวคือ: ./transeq xyz1 xyz1.faa -table 11 มีวิธีการทำเช่นนั้นโดยอัตโนมัติหรือไม่? อาจจะเป็นคำสั่งผสมที่ต้องทำ?

6
ฉันจะพิมพ์เฉพาะคำสั่งบางอย่างจากสคริปต์ทุบตีขณะที่ทำงานได้อย่างไร
ฉันมีสคริปต์ทุบตีด้วยถ้าคำสั่งต่างๆตามอาร์กิวเมนต์บรรทัดคำสั่งที่ฉันผ่านเมื่อเรียกมัน การมีเอาต์พุตบางอย่างเกี่ยวกับคำสั่งที่กำลังรันอยู่มีประโยชน์ในการยืนยันการไหลของข้อมูลทั้งหมดหากข้อความสั่ง แต่โซลูชันปัจจุบันของฉันให้ข้อมูลมากเกินไป การใช้set -vในสคริปต์ค่อนข้างมีประโยชน์ในการดูคำสั่งที่พิมพ์บนหน้าจอขณะที่รันในสคริปต์ แต่ฉันได้รับคำสั่งมากเกินไป มันเกือบจะเหมือนสำเนาทั้งหมดของสคริปต์ ฉันต้องการเอาต์พุตที่แสดงว่าคำสั่งใดกำลังทำงานอยู่ แต่ฉันไม่ต้องการเห็นข้อคิดเห็นบรรทัดใหม่นิพจน์ใน if statement ฯลฯ มีวิธีที่ฉันสามารถส่งออกเป็นไปได้ทั้งหมดที่สร้างขึ้นโดยตัวเลือก -v ผ่าน regex ก่อนที่จะถูกพิมพ์? หรือวิธีอื่น ๆ ในการรับ bash ไปยังคำสั่งเอาต์พุตของ "type" บางอย่างเท่านั้น (เช่นที่กำลังใช้ executables และไม่เพียงแค่ bash statement เฉพาะข้อคิดเห็น ฯลฯ หรือไม่) [1] /programming/257616/sudo-changes-path-whyมีประโยชน์มากในเรื่องนี้และเป็นที่ที่ฉันได้รับคำแนะนำสำหรับการset -vใช้งาน แก้ไข : สคริปต์ที่คล้ายกัน (แต่ไม่เหมือนกัน) กับสคริปต์ที่ฉันใช้: #!/bin/bash #get verbose command output set -v env=$1 if [ …

1
เพิ่มความแม่นยำ% e ด้วยคำสั่ง / usr / bin / time
เมื่อฉันรันคำสั่ง time ใน shell time ./myappฉันจะได้ผลลัพธ์ดังนี้: real 0m0.668s user 0m0.112s sys 0m0.028s อย่างไรก็ตามเมื่อฉันเรียกใช้คำสั่ง\time -f %e ./myappฉันสูญเสียความแม่นยำและฉันได้รับ: 2.01s ถ้าฉันใช้%Eคำสั่งฉันก็จะสูญเสียความแม่นยำไปในทางเดียวกัน ฉันจะเปลี่ยนเพื่อให้มีความแม่นยำมากขึ้นอีกครั้งได้อย่างไร ฉันอ้างอิงงานวิจัยของฉันในคำสั่ง Linux / Unix นี้: เวลาและตามคำถามนี้
19 shell  scripting  time 

4
ฉันจะทราบได้อย่างไรว่าเปิดใช้งาน IP Multicast
ฉันมีสคริปต์ที่รันการทดสอบ IP multicast แต่สคริปต์ของฉันล้มเหลวในเครื่องลินุกซ์โดยเฉพาะ ฉันรู้ว่าฉันสามารถดูCONFIG_IP_MULTICASTในไฟล์การตั้งค่าเคอร์เนลเพื่อตรวจสอบว่าเคอร์เนลถูกรวบรวมด้วยนี้ อย่างไรก็ตามมันจะง่ายกว่าในการตั้งค่าสถานะความต้องการที่ขาดหายไปในสคริปต์ของฉันถ้าฉันสามารถดู/procหรือsysctlได้รับคำตอบ มีวิธีในการค้นหาว่า IP Multicast ถูกคอมไพล์ลงในเคอร์เนลโดยไม่ต้องดูCONFIG_IP_MULTICASTหรือไม่?

6
ค้นหาค่าสูงสุดของคอลัมน์ 1 และพิมพ์ระเบียนที่เกี่ยวข้องจากคอลัมน์ 2 จากไฟล์
วิธีค้นหาค่าสูงสุดจากคอลัมน์ 1 และ echo ตำแหน่งพา ธ ตามลำดับจากไฟล์ที่มีจำนวนเรคคอร์ด $ cat version.log 112030 /opt/oracle/app/oracle/product/11.2.0 121010 /opt/oracle/app/oracle/product/12.1.0 ผลลัพธ์ที่คาดหวัง: /opt/oracle/app/oracle/product/12.1.0


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