ตัวแปลงไฟล์เชลล์ (* .sh) เป็นชุดไฟล์


0

มันเงียบน่าเบื่อที่จะแปลงเชลล์สคริปต์เป็นไฟล์แบทช์ มีวิธีการดำเนินการโดยอัตโนมัติและง่ายดาย. sh เพื่อ. bat การแปลงหรือในทางกลับกัน?

คำตอบ:


5

ฉันสงสัยอย่างจริงจัง แม่นยำเพราะเป็นเรื่องน่าเบื่อที่ต้องทำหรือแม่นยำมากขึ้นเพราะสาเหตุที่ทำให้มันน่าเบื่อ ระบบต่าง ๆ ที่เกี่ยวข้องกับซอฟต์แวร์ต่างกันโดยสิ้นเชิง

มันไม่ได้เป็นเพียงเรื่องของการเพิ่มหรือลบ #! บรรทัดที่ด้านบน รับบรรทัดนี้จากเชลล์สคริปต์ที่ฉันเขียน

STREAM_FROM=$($ZFS list -t snapshot ${BACKUP_TARGET_FS} -H -o name -r | grep '@backup_' | tail -n 1 | cut -d '@' -f 2)

(ใช่อาจมีวิธีที่มีประสิทธิภาพมากกว่าการทำท่อจำนวนหนึ่ง แต่นั่นอยู่ข้างจุดสคริปต์ที่มีปัญหาไม่ต้องการประสิทธิภาพที่เหนือกว่า) นี่คือการกำหนดตัวแปรการขยายนิพจน์ subshell การเรียกใช้คำสั่งโดย การขยายตัวของตัวแปรสภาพแวดล้อม, การขยายตัวแปรสภาพแวดล้อม, ท่อ, grep, tail และ cut รีดทั้งหมดเป็นคำสั่งเดียว เพื่อที่จะแปลงได้อย่างแม่นยำแม้แต่คำสั่งเดียวนี้คุณจำเป็นต้องรู้วิธีการทำงานทั้งหมดและความหมายที่แน่นอนของตัวเลือกต่างๆไปยังยูทิลิตี้มาตรฐานที่เรียกใช้และวิธีการสร้างลักษณะการทำงานบนระบบเป้าหมายอีกครั้ง

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

หรือรับงานสแกนที่ฉันทำเมื่อวันก่อน (ไม่ใช่สคริปต์ แต่เป็นไปได้อย่างง่ายดายฉันแค่พิมพ์มันลงในเทอร์มินัล ฉันลงเอยด้วยบางสิ่งที่ไม่เหมือนดังต่อไปนี้:

for n in $(seq 10 66); do scanimage --button-controlled=yes -x 180 -y 200 --mode Gray --format=tiff > scan${n}.tmp && convert scan${n}.tmp scan${n}.png && \rm scan${n}.tmp; done

นี่เป็นตัวอย่างที่ซับซ้อนเนื่องจากมีตัวเลือก - ควบคุมโดยปุ่ม แบ็กเอนด์ ไม่ใช่โดย scanimage (SANE) นั้นเอง ดังนั้นเครื่องมือในการแปลงไลเนอร์ตัวนี้จะต้องรู้เกี่ยวกับตัวเลือกทุกตัวที่แบ็กเอนด์ของ SANE และตัวสำรองในระบบเป้าหมาย ชัดเจนไม่เป็นไปได้และอาจไม่ได้ เป็นไปได้ .

แม้แต่เชลล์สคริปธรรมดาอย่างแท้จริงที่ทำซ้ำเฉพาะชุดไฟล์เท่านั้นก็ไม่น่าที่จะแปลงได้โดยอัตโนมัติ และสคริปต์ที่เรียบง่ายเช่นนี้มีอยู่น้อยและอยู่ไกล

นอกจากนี้ "เชลล์สคริปต์" ไม่ใช่สิ่งที่เป็นเนื้อเดียวกัน: สิ่งที่จำเป็นในการแปลงสคริปต์เชลล์ทุบตีแตกต่างจากสิ่งที่จำเป็นในการแปลงเชลล์สคริปต์ zsh แตกต่างจากสิ่งที่จำเป็นในการแปลงเชลล์สคริปต์ที่เขียนด้วย Perl ในหลายกรณีอาจไม่มีแม้แต่คู่ที่ตรงกันโดยตรงกับไวยากรณ์ต่างๆการแปลที่ซับซ้อนยิ่งขึ้น


ขอบคุณมาก Michael Kjörling คำตอบของคุณส่องสว่างที่สุด
stack

1
เพียงเพราะคุณไม่สามารถทำอะไรบางอย่างโดยทั่วไปไม่ได้หมายความว่าคุณไม่สามารถทำได้
asmeurer

@ asmeurer เห็นด้วยกับคุณว่าอาจไม่มีซอฟต์แวร์หรือเทคโนโลยีที่สามารถแก้ไขกรณีได้
stack

1
@ asmeurer OP ไม่ได้ถามเกี่ยวกับกรณีเฉพาะดังนั้นวิธีเดียวที่สมเหตุสมผล (สำหรับฉัน) ในการตีความคำถามคือหมายถึงกรณีทั่วไป ถ้าคุณรู้สึกว่าคุณมีคำตอบที่ดีกว่าทำโพสต์ไว้ คำถามเก่านั้นไม่สำคัญ ในความเป็นจริงนั่นคือสิ่งที่ การฟื้นฟู และ หมอผี ป้ายทั้งหมดเกี่ยวกับ
a CVn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.