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

5
ทำไมไม่ใช้“ อันไหน”? จะใช้อะไรดี?
เมื่อมองหาเส้นทางไปปฏิบัติการหรือตรวจสอบสิ่งที่จะเกิดขึ้นถ้าคุณใส่ชื่อคำสั่งในเปลือก Unix มีมากมายเหลือเฟือของสาธารณูปโภคที่แตกต่างกัน ( which, type, command, whence, where, whereis, whatis, hashฯลฯ ) เรามักได้ยินว่าwhichควรหลีกเลี่ยง ทำไม? เราควรใช้อะไรแทน


9
// foo / bar ระบบใดที่แตกต่างจาก / foo / bar?
ตลอดทั้งข้อมูลจำเพาะ POSIX มีข้อกำหนด ( 1 , 2 , 3 ... ) เพื่อให้การใช้งานในการรักษาเส้นทางเริ่มต้นด้วยสอง/พิเศษ แอปพลิเคชัน POSIX (แอปพลิเคชันที่เขียนไปยังข้อมูลจำเพาะ POSIX เพื่อพกพาไปยังระบบที่สอดคล้องกับ POSIX ทั้งหมด) ไม่สามารถสันนิษฐานได้ว่า//foo/barเป็นเช่นเดียวกับ/foo/bar(แม้ว่าพวกเขาสามารถสันนิษฐานได้ว่า///foo/barเป็นเหมือนกัน/foo/bar) ตอนนี้ระบบ POSIX เหล่านั้น//fooคืออะไร ฉันเชื่อ (ตอนนี้ฉันได้รับการพิสูจน์แล้วผิด ) ว่า POSIX นั้นถูกผลักโดย Microsoft สำหรับ Unix Variant (XENIX) และ Windows POSIX เลเยอร์ (อาจมีใครยืนยันได้หรือไม่) มันถูกใช้โดย Cygwin ซึ่งเป็นเลเยอร์เหมือน POSIX สำหรับ Microsoft Windows มีระบบที่ไม่ใช่ของ Microsoft Windows หรือไม่? …

18
ตรวจจับระบบ init โดยใช้เชลล์
สิ่งนี้อาจมีอะไรเพิ่มเติมเกี่ยวกับการตรวจจับระบบปฏิบัติการ แต่ฉันต้องการระบบเริ่มต้นที่ใช้อยู่ในระบบเป็นพิเศษ Fedora 15 และ Ubuntu ตอนนี้ใช้ systemd, Ubuntu เคยใช้ Upstart (เริ่มต้นนานจนถึง 15.04), ในขณะที่คนอื่นใช้รูปแบบของ System V ฉันมีแอปพลิเคชันที่ฉันเขียนเพื่อเป็นภูตข้ามแพลตฟอร์ม สคริปต์ init กำลังถูกสร้างแบบไดนามิกขึ้นอยู่กับพารามิเตอร์ที่สามารถส่งผ่านไปยังการกำหนดค่า สิ่งที่ฉันต้องการทำคือสร้างสคริปต์สำหรับระบบเริ่มต้นเฉพาะที่ใช้ วิธีนี้สคริปต์การติดตั้งสามารถรันได้อย่างสมเหตุสมผลโดยไม่มีพารามิเตอร์เนื่องจากรูทและ daemon สามารถ "ติดตั้ง" โดยอัตโนมัติ นี่คือสิ่งที่ฉันเกิดขึ้น: ค้นหา systemd, พุ่งพรวด, ฯลฯ ใน / bin เปรียบเทียบ / proc / 1 / comm กับ systemd, พุ่งพรวด, ฯลฯ ถามผู้ใช้ สิ่งที่จะเป็นวิธีที่ข้าม / แพลตฟอร์มที่ดีที่สุดในการทำเช่นนี้? ประเภทที่เกี่ยวข้องฉันสามารถพึ่งพาการทุบตีเป็นส่วนใหญ่ของ …

6
ทรัพยากรสำหรับการเขียนโปรแกรมเชลล์แบบพกพา
มีทรัพยากรใดบ้างสำหรับการเขียนโปรแกรมเชลล์แบบพกพา คำตอบที่ดีที่สุดคือการทดสอบบนแพลตฟอร์มเป้าหมายทั้งหมด แต่ก็ไม่ค่อยมีประโยชน์ ข้อกำหนด POSIX / โสดยูนิกซ์เป็นจุดเริ่มต้น แต่มันจะบอกคุณว่าค่าระดับของการสนับสนุนของแต่ละการดำเนินการเป็นหรือส่วนขยายที่มีอยู่ทั่วไป คุณสามารถอ่านเอกสารประกอบของแต่ละการติดตั้งได้ แต่ใช้เวลานานและไม่แม่นยำอย่างสมบูรณ์ ฉันดูเหมือนว่ารูปแบบในอุดมคติจะเป็นข้อมูลจำเพาะ POSIX รุ่นที่มีคำอธิบายประกอบแบบชุมชนโดยที่แต่ละคุณลักษณะจะมีคำอธิบายประกอบตามระดับการสนับสนุนในการนำไปใช้งานที่แตกต่างกัน มีอะไรแบบนี้เหรอ? หรือมีทรัพยากรที่มีประโยชน์อื่น ๆ ตัวอย่างเช่นมีหน้าความสามารถในการพกพาของเชลล์ของ Sven Mascheckแต่เป็นเพียงเกี่ยวกับองค์ประกอบทางวากยสัมพันธ์และบิวด์อินสองสามตัวและครอบคลุมเฉพาะเชลล์เก่าเท่านั้น ฉันกำลังมองหาแหล่งข้อมูลที่ครอบคลุมมากขึ้น

5
แบบพกพาเป็นอย่างไร / dev / stdin, / dev / stdout และ / dev / stderr?
บางครั้งผมต้องระบุเส้นทาง "เทียบเท่า" ของหนึ่งในลำธาร IO มาตรฐาน ( stdin, stdout, stderr) ตั้งแต่ 99% ของเวลาที่ฉันทำงานกับ Linux ฉันแค่เตรียมที่/dev/จะรับ/dev/stdinฯลฯ และสิ่งนี้ " ดูเหมือนจะทำสิ่งที่ถูกต้อง" แต่สิ่งหนึ่งที่ฉันไม่สบายใจเกี่ยวกับเหตุผลดังกล่าวอยู่เสมอ (เพราะแน่นอน "ดูเหมือนว่าจะทำงาน" จนกว่าจะไม่) นอกจากนี้ฉันไม่มีความรู้สึกที่ดีสำหรับวิธีการพกพาในการซ้อมรบนี้ ดังนั้นฉันมีคำถามสองสามข้อ: ในบริบทของลินุกซ์มันมีความปลอดภัย (ใช่ / ไม่ใช่) จะถือเอาstdin, stdoutและstderrด้วย/dev/stdin, /dev/stdoutและ /dev/stderr? โดยทั่วไปแล้วความเท่าเทียมนี้ " พกพาได้อย่างเพียงพอ" หรือไม่? ฉันไม่พบการอ้างอิง POSIX ใด ๆ

7
การทดสอบหรือ [หรือ [พกพาได้มากกว่าระหว่างเชลล์ bash และระหว่างเชลล์อื่นหรือไม่?
ฉันเห็นฉันสามารถทำ $ [ -w /home/durrantm ] && echo "writable" writable หรือ $ test -w /home/durrantm && echo "writable" writable หรือ $ [[ -w /home/durrantm ]] && echo "writable" writable ฉันชอบใช้ไวยากรณ์ที่สาม พวกมันเทียบเท่ากันในทุกวิถีทางและสำหรับคดีลบและคดีขอบ มีความแตกต่างในการพกพาเช่นระหว่างทุบตีบน Ubuntu และบน OS X หรือรุ่นทุบตีเก่า / ใหม่กว่าเช่นก่อน / หลัง 4.0 และพวกเขาทั้งสองขยายการแสดงออกในลักษณะเดียวกันหรือไม่

7
ฉันจะประสบความสำเร็จในการพกพาได้ด้วย sed -i (การแก้ไขในสถานที่) ได้อย่างไร
ฉันกำลังเขียนเชลล์สคริปต์สำหรับเซิร์ฟเวอร์ของฉันซึ่งเป็นโฮสติ้งที่ใช้ร่วมกันที่ใช้ FreeBSD ฉันยังต้องการที่จะทดสอบพวกเขาในพื้นที่บนพีซีของฉันที่ใช้ Linux ดังนั้นฉันพยายามเขียนแบบพกพา แต่sedฉันไม่เห็นวิธีการทำ ส่วนหนึ่งของเว็บไซต์ของฉันใช้ไฟล์ HTML แบบคงที่ที่สร้างขึ้นและบรรทัด sed นี้แทรก DOCTYPE ที่ถูกต้องหลังจากการสร้างใหม่แต่ละครั้ง: sed -i '1s/^/<!DOCTYPE html> \n/' ${file_name.html} มันทำงานร่วมกับ GNU sedบน Linux แต่ FreeBSD sedคาดว่าอาร์กิวเมนต์แรกหลังจาก-iตัวเลือกที่จะเป็นส่วนขยายสำหรับสำเนาสำรอง นี่คือลักษณะ: sed -i '' '1s/^/<!DOCTYPE html> \n/' ${file_name.html} อย่างไรก็ตาม GNU ในทางกลับกันคาดว่าการแสดงออกที่จะปฏิบัติตามทันทีหลังจากที่sed -i(นอกจากนี้ยังต้องการการแก้ไขด้วยการจัดการบรรทัดใหม่ แต่ได้รับคำตอบแล้วในที่นี้ ) แน่นอนว่าฉันสามารถรวมการเปลี่ยนแปลงนี้ไว้ในสำเนาเซิร์ฟเวอร์ของสคริปต์ แต่นั่นอาจทำให้เกิดความยุ่งเหยิงเช่นการใช้ VCS สำหรับการกำหนดเวอร์ชัน มีวิธีในการบรรลุสิ่งนี้ด้วย sed แบบพกพาอย่างเต็มที่?

7
วิธีพกพาเพื่อรับเส้นทางที่สมบูรณ์ของสคริปต์
เป็นวิธีแบบพกพาสำหรับสคริปต์ (zsh) เพื่อกำหนดเส้นทางที่แน่นอนคืออะไร? บน Linux ฉันใช้สิ่งที่ชอบ mypath=$(readlink -f $0) ... แต่นี่ไม่ใช่แบบพกพา (เช่นreadlinkในดาร์วินไม่รู้จัก-fธงและไม่มีอะไรเทียบเท่า) (เช่นเดียวกับการใช้readlinkสิ่งนี้คือเป็นที่ยอมรับว่าเป็นแฮ็คที่ดูคลุมเครือ) อะไรคือวิธีพกพาที่มากขึ้น?

3
การย้าย Linux ไปยังข้อกำหนดแพลตฟอร์มอื่น [ปิด]
ฉันรู้ว่า Linux สามารถใช้งานได้และได้รับการจัดพอร์ตสำหรับแพลตฟอร์มที่แตกต่างกันเช่น X86, ARM, PowerPC เป็นต้น อย่างไรก็ตามในแง่ของการพอร์ตสิ่งที่จำเป็นต้องมี? ความเข้าใจของฉันคือว่า Linux เป็นซอฟต์แวร์ที่เขียนใน C. ดังนั้นเมื่อพอร์ต Linux เดิมจาก X86 ถึง ARM หรืออื่น ๆ มันไม่ได้เป็นเพียงเรื่องของการรวบรวมรหัสกับคอมไพเลอร์สำหรับสถาปัตยกรรมเป้าหมายที่เฉพาะเจาะจงอีกครั้ง? วางไดรเวอร์อุปกรณ์สำหรับอุปกรณ์ต่อพ่วงที่แตกต่างกันสิ่งอื่น ๆ ที่จะต้องทำเมื่อย้ายพอร์ต Linux ไปยังสถาปัตยกรรมใหม่ คอมไพเลอร์ไม่ได้ดูแลทุกอย่างสำหรับเราหรือไม่?

4
ทดสอบว่าตัวแปรว่างในเชลล์สคริปต์หรือไม่
ฉันได้เห็นเทคนิคต่อไปนี้ใช้หลายครั้งในหลาย ๆ เชลล์เพื่อทดสอบว่าตัวแปรว่างเปล่าหรือไม่: if [ "x$1" = "x" ]; then # Variable is empty fi มีข้อได้เปรียบอะไรบ้างในการใช้สิ่งนี้มากกว่าที่ยอมรับมากกว่านี้if [ -z "$1" ]? มันอาจเป็นปัญหาการพกพาหรือไม่?

4
sudo สากลเป็นอย่างไร
ฉันกำลังเขียนคำแนะนำเกี่ยวกับวิธีการติดตั้งบางอย่าง (เกี่ยวข้องกับ TeX - ถ้าคุณไม่ถามฉันจะไม่ทำลายวันของคุณด้วยการให้รายละเอียดเพิ่มเติม) และใช้sudoในการติดตั้งทั้งระบบ มีคนแสดงความคิดเห็นว่าพวกเขาไม่คิดว่าsudoมีให้ใน Linux (หรือ Unix) ทั้งหมด มีการแจกแจงแบบ Unix ที่ไม่มีsudoและถ้าเป็นเช่นนั้น มีคำสั่ง "Get me superuser privilege" ที่เป็นที่ยอมรับในระดับสากลที่อยู่ในระบบทั้งหมดหรือไม่?

2
วิธีการรันคำสั่งแบบง่ายโดยพลการบน ssh โดยไม่ทราบว่าเชลล์ล็อกอินของผู้ใช้รีโมต
ssh มีคุณสมบัติที่น่ารำคาญเมื่อคุณเรียกใช้: ssh user@host cmd and "here's" "one arg" แทนที่จะเรียกใช้งานโดยที่cmdมีการขัดแย้งบนhostมันจะเชื่อมต่อcmdและขัดแย้งกับช่องว่างและรันเชลล์hostเพื่อตีความสตริงผลลัพธ์ (ฉันเดาว่านั่นเป็นสาเหตุที่เรียกว่าsshไม่ใช่sexec) ยิ่งกว่านั้นคุณไม่รู้ว่าเชลล์จะใช้อะไรในการตีความสตริงนั้นเพราะนั่นคือเชลล์ล็อกอินuserที่ไม่ได้รับประกันว่าจะเป็นบอร์นเหมือนที่มีคนใช้tcshเป็นเชลล์ล็อกอินfishอยู่และกำลังเพิ่มขึ้นเรื่อย ๆ มีวิธีแก้ไขไหม? สมมติว่าฉันมีคำสั่งเป็นรายการของอาร์กิวเมนต์เก็บไว้ในที่bashอาร์เรย์แต่ละที่อาจจะมีลำดับของไบต์ไม่ใช่ null ใด ๆ จะมีวิธีใดที่จะมีมันดำเนินการในhostขณะที่userในลักษณะที่สอดคล้องกันโดยไม่คำนึงถึงเปลือกเข้าสู่ระบบที่userเกี่ยวกับhost(ซึ่งเราจะถือว่าเป็นหนึ่งในตระกูลเชลล์ที่สำคัญของ Unix: Bourne, csh, rc / es, fish)? อีกข้อสันนิษฐานที่สมเหตุสมผลที่ฉันควรจะทำก็คือมีshคำสั่งhostให้ใช้งานได้ใน$PATHที่นั้นเข้ากันได้กับบอร์น ตัวอย่าง: cmd=( 'printf' '<%s>\n' 'arg with $and spaces' '' # empty $'even\n* * *\nnewlines' "and 'single quotes'" '!!' ) ฉันสามารถเรียกใช้ภายในเครื่องด้วยksh/ zsh/ bash/ yashเป็น: …

5
แนะนำให้ใช้ zsh แทนที่จะเป็นสคริปต์ทุบตีหรือไม่? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิด4 วันที่ผ่านมา ฉันสามารถสันนิษฐานได้ว่ามีคนจำนวนมากพอที่จะzshติดตั้งเพื่อรันสคริปต์ด้วย #!/usr/bin/env zsh ในฐานะ shebang? หรือสิ่งนี้จะทำให้สคริปต์ของฉันไม่สามารถทำงานได้บนระบบมากเกินไปหรือไม่ ชี้แจง: ฉันสนใจโปรแกรม / สคริปต์ที่ผู้ใช้อาจต้องการเรียกใช้ (เช่นบน Ubuntu, Debian, SUSE, Arch & c.)

8
ภาษาสคริปต์สากลสำหรับ Linux คืออะไร?
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Unix & Linux Stack Exchange อพยพ 7 ปีที่ผ่านมา เรากำลังเขียนสคริปต์สำหรับระบบ Linux มีการถกเถียงกันว่าภาษาสคริปต์ Linux ที่ใช้กันทั่วไปจะเป็นภาษาใด Bash, SH, Posix? อะไร?

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