ทุบตีใน Linux กับ Mac OS


27

ฉันกำลังซื้อ iMac ฉันทำงานกับ Linux มาเป็นเวลานานและฉันก็ใช้สคริปต์ทุบตี ฉันสงสัยว่าคำสั่ง bash และคุณสมบัติทั้งหมดนั้นมีใน Mac OS หรือไม่? ใครบ้างมีประสบการณ์กับการเขียนสคริปต์ทุบตี Mac? ฉันขอขอบคุณที่คุณป้อนข้อมูล

คำตอบ:


32

Bash นั้นส่วนใหญ่แล้วจะเหมือนกัน จะมีความแตกต่างเล็ก ๆน้อยแต่สิ่งเหล่านี้จะไม่มีผลต่อการพกพาของสคริปต์ของคุณ

ปัญหาที่สำคัญคือ coreutils ของ MacOS นั้นใช้ FreeBSD ในขณะที่ยูทิลิตี้ที่คุณคุ้นเคยมักจะมาจากโครงการ GNU coreutils FreeBSD นั้นไม่สามารถใช้งานร่วมกับ coreutils ของ GNU ได้เสมอไป มีประสิทธิภาพการทำงานและพฤติกรรมแตกต่างระหว่าง GNU และ FreeBSD รุ่นมีsed , grep , PSและสาธารณูปโภคอื่น

คุณสามารถติดตั้ง GNU coreutils แต่มีg-คำนำหน้า (เช่นgcatสำหรับcat) มันไม่ได้เป็นความคิดที่ดีที่จะเปลี่ยน coreutils MacOS กับ coreutils GNU


6
ควรมีการขยายว่าการใช้ยูทิลิตี้หลักที่ใช้ FreeBSD แบบมาตรฐานสามารถส่งผลกระทบต่อความสามารถในการพกพาของสคริปต์ของคุณ (เช่นpsมีค่าสถานะแตกต่างกันเช่นเดียวกับgrep) ฉันกระแทกหัวของฉันกับกำแพงสองสามครั้งพยายามที่จะคิดออกว่าทำไมสคริปต์ Ubuntu ของฉันไม่ได้สร้างผลลัพธ์เดียวกันบน Mac ของฉัน
Chris Gregg

1
หากคุณต้องการเขียนสคริปต์ของคุณให้พกพาได้www2.opengroup.org/ogsys/jsp/publications/mainPage.jspเป็นสถานที่ที่ยอดเยี่ยมในการรับข้อมูลจำเพาะมาตรฐานอย่างเคร่งครัดสำหรับอรรถประโยชน์และคำสั่ง POSIX และ XCU
kojiro

@ChrisGregg: ฉันเห็นด้วย ฉันเพิ่มคำตอบลงเล็กน้อยเพื่อเน้นว่ามีความเข้ากันไม่ได้ระหว่างชุดเครื่องมือทั้งสอง

5

หากมีความสำคัญbashบน Mac OS X Mountain Lion ยังคงเป็นเวอร์ชัน 3.2 การแจกแจงลินุกซ์ส่วนใหญ่ในวันนี้จะมาพร้อมกับ 4.x ดังนั้นคุณจะพลาดฟีเจอร์เวอร์ชัน 4 ในปัจจุบันเวอร์ชัน 4.2.45 พร้อมใช้งานจาก Homebrew เป็นวิธีแก้ปัญหา ฉันไม่ทราบว่ามีเวอร์ชันใดใน Mavericks ฉันไม่แน่ใจว่าใครที่รู้จะได้รับอนุญาตให้พูด

ดังที่คนอื่นพูดถึงbashเป็นคนเดียวกันbash(นอกเหนือจากรุ่นที่ระบุไว้แล้ว) แต่ Mac OS X ใช้ userland BSD เป็นส่วนใหญ่ ระบบสาธารณูปโภคมาตรฐานจำนวนมากมีตัวเลือกแตกต่างกันเล็กน้อยหรือทำงานแตกต่างกันเล็กน้อย น่าเสียดายที่พวกเขามีรายชื่อมากเกินไปที่นี่


2
4 ปีต่อมาทุบตีบน High Sierra ยังคงใช้งานอยู่: GNU ทุบตี, เวอร์ชั่น 3.2.57 (1) - ปล่อย (x86_64-apple-darwin17) ลิขสิทธิ์ (C) มูลนิธิซอฟต์แวร์เสรี 2007, Inc.
Nate Lockwood

4

ติดตั้งhomebrew (ตัวจัดการแพ็กเกจ) จากนั้นติดตั้งยูทิลิตี้พื้นฐานบางเวอร์ชัน gnu:

$ brew install coreutils
$ brew install gnu-sed

หลังจากการติดตั้งแต่ละครั้งมันจะแสดงขั้นตอนที่คุณสามารถทำตามเพื่อให้คุณสามารถโทรออกdateแทนgdateตัวอย่างเช่นเพื่อให้คุณยังคงสามารถใช้สคริปต์ทุบตี Linux ของคุณโดยไม่มีการดัดแปลงใด ๆ

ขอแสดงความยินดีคุณเพิ่งแก้ไขปัญหาการเขียนสคริปต์ข้ามแพลตฟอร์มได้ 99%


3
ในทางกลับกันถ้าสคริปต์ของคุณตั้งใจพกพาคุณจะต้องแก้ไขสคริปต์ไม่ใช่อาการ
tripleee

2

สิ่งหนึ่งที่น่าผิดหวังที่มาจาก Linux กับ Mac คือไม่มี/procระบบไฟล์หลอก สิ่งนี้ทำให้สคริปต์ Linux ของฉันเสียหายจำนวนหนึ่งและอาจเป็นเรื่องยากที่จะหาวิธีที่เหมาะสมในการรับข้อมูลเดียวกับที่คุณพบในprocสคริปต์ทุบตี Mac ของคุณ


0

ฉันเป็นผู้ใช้ 'ส่วนใหญ่ Linux, mac เป็นครั้งคราว' และฉันพบว่า

ทุบตี~/.bashrcและ~/.bash_aliasesทำงานส่วนใหญ่เหมือนกัน

ปัญหาหนึ่งที่ฉันได้พบคือหนึ่งในคำสั่งเพื่อเปลี่ยนพรอมต์สีไม่ทำงานบน Mac จากประสบการณ์นั้นและอื่น ๆ ฉันได้เรียนรู้ที่จะทำให้หน้าต่างเทอร์มินัลเปิดและเข้าสู่ระบบเมื่อตั้งค่า.bashrcไฟล์ของฉัน นั่นคือฉันสามารถทดสอบ 'หน้าต่างใหม่' และค้นหาข้อผิดพลาดใด ๆ ในการเข้าสู่ระบบยังคงอยู่ในหนึ่ง

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