ยูนิกซ์เทียบเท่า PowerShell?


21

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

PowerShellเป็นเชลล์ Windows ที่หลีกเลี่ยงปัญหานั้นโดยอนุญาตให้คุณไพพ์วัตถุที่พิมพ์ระหว่างคำสั่งเชลล์แทนที่จะเป็นเพียงข้อความ

มี Unix shells ใดบ้างที่ใช้เชิงวัตถุแทนที่จะเป็นแบบข้อความเช่น PowerShell

คำตอบ:


24

ไม่มันเป็นวิธีอื่น ไม่มีช้อน ^ H ^ H ^ ข้อมูลที่มีโครงสร้าง มีข้อความเท่านั้น

ส่วนใหญ่ของปรัชญา Unix ขึ้นอยู่กับแนวคิดของการแสดงผลข้อความและการยอมรับข้อความเป็นอินพุต คุณอาจต้องการลองอ่าน " The Art of Unix Programming " ซึ่งมีคำอธิบายที่ดีเกี่ยวกับเรื่องนี้

อย่าเข้าใจฉันผิด: ฉันเข้าใจประเด็นของคุณและฉันรู้ว่าคุณกำลังพยายามทำอะไร มีสิ่งต่าง ๆ เช่นล่ามแบบโต้ตอบของ Ruby และ Python ซึ่งสามารถใช้เป็นเชลล์ได้ แต่พวกมันไม่เป็นมิตรกับภารกิจพื้นฐานอย่าง Bash ลองและเปลี่ยนไดเรกทอรีตัวอย่างเช่น

นอกจากนี้การใช้วัตถุในเปลือกก็ไม่ได้ทั้งหมด หากเชลล์ของคุณรองรับเฉพาะสิ่งนี้บน Unix คุณจะเสีย เครื่องมือจัดการข้อความ Unix มาตรฐานทั้งหมดจะต้องมีการแก้ไขเช่น grep, awk, sed, ฯลฯ

ฉันคิดว่ามีความพยายามที่จะสร้างบางสิ่งเช่นนี้เมื่อไม่กี่ปีก่อน แต่ฉันจำชื่อไม่ได้และไม่เคยได้ยินมานานแล้ว มันอาจจะไม่ถอด


2
น่าสนใจการแทนที่สตรีมข้อความ (หรือจริง ๆ แล้วสตรีมไบต์) โดยสตรีมวัตถุข้อมูลจะไม่ขัดกับหลักการทั่วไปที่กำหนดไว้ในหนังสือ ดูเหมือนว่าจะเล่นได้ดีขึ้นด้วย "กฎการเป็นตัวแทน" เป็นเพียงการที่ยูนิกซ์เลือกสตรีมข้อความเป็นส่วนต่อประสานระหว่างโปรแกรม
Wim Coenen

1
แต่โดย 'data object' คุณหมายถึงวัตถุ Python / Ruby / C ++ จริงหรืออะไรที่คล้ายกับ C struct?
wzzrd

3
+1 "อย่าพยายามงอช้อนนั่นเป็นไปไม่ได้แทนที่จะพยายามเข้าใจความจริง ... ไม่มีช้อน" มันไม่ได้เป็น text-as-an-interface มากนัก แต่มีกระแสข้อมูลเป็นส่วนต่อประสาน วัตถุที่ดีสำหรับการเขียนโปรแกรม แต่บางครั้งพวกเขากลายเป็นคุกเล็ก ๆ เล็ก ๆ น้อย ๆ จะนำความคิดของคุณลงใน ...
เอเวอรี่เพน

2
zsh> ทุบตี ความคิดเห็นของฉัน แต่จริง ๆ แล้วถ้าคุณไม่ได้ลอง zsh คุณควร
xenoterracide

2
@WimCoenen การจัดส่ง "ข้อมูลที่มีโครงสร้าง" หมายถึงทุกคนและป้าทิลลี่ต้องยอมรับว่า "โครงสร้าง" คืออะไร ls(1)สิ่งที่ชอบ ไร้ประโยชน์โดยสิ้นเชิง
vonbrand

10

จริงๆแล้วมีโปรเจ็กต์ชื่อPashที่มีจุดมุ่งหมายในการใช้ PowerShell (ด้านบนของ Mono) แต่ดูเหมือนว่าจะหยุดทำงาน


2
แฮกเกอร์ Unix ใช้เวลากับโครงการที่ใช้ไมโครซอฟท์ = นั่นคือมดและตั๊กแตนทั่วอีกครั้ง
ixtmixilix

4
เรากลับมาจากความตาย: github.com/JayBazuzi/Pash , twitter.com/PashProject
Jay Bazuzi

4

มีโครงการที่มีเป้าหมายคล้ายคลึงกันร่วมกับ PowerShell คือHotwire มันรวม SH ปกติกับการเขียนสคริปต์หลามและสภาพแวดล้อมหน้าต่าง / กราฟิก คุณสามารถให้มันดู

มันขึ้นอยู่กับไปป์ไลน์ที่มุ่งเน้นวัตถุที่คุณสามารถขยายด้วยวัตถุของคุณเองโดยการห่อโปรแกรมที่มีอยู่หรือใช้ห้องสมุด Python


1
นั่นเป็นโครงการที่ฉันพยายามจะจำชื่อออกมา! คอมมิชชันล่าสุดในหีบ: สองปีที่แล้ว ...
wzzrd

4

PowerShell เป็นโอเพ่นซอร์สในปี 2559 ตั้งแต่นั้นมาก็มีหลายแพลตฟอร์มมากขึ้นเรื่อย ๆ ซอร์สโค้ดมีอยู่ในGitHubดังนั้นจึงเป็นแพ็คเกจการติดตั้งสำหรับระบบที่คล้าย UNIX


1

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

คุณสามารถทำได้อย่างน้อย Ruby, Perl, Python, Haskell (เช่น GHCi), JavaScript (เช่น node.js), Matlab และภาษาอื่น ๆ อย่างแน่นอน ...


ไพพ์เป็นวัตถุหมายความว่าคุณสามารถทำการประเมินผลแบบขี้เกียจเป็นต้นดังนั้นหากคุณผ่านชุดของวัตถุไฟล์ลงไปในไพพ์ .. บางทีคุณอาจสนใจชื่อหรือวันที่แก้ไข แต่อาจเป็นเนื้อหา ข้อมูลใดที่คุณส่งผ่านใน JSON คำตอบ: มันขึ้นอยู่กับ หากผู้บริโภคของไปป์ดึงข้อมูลก็สามารถขอข้อมูลที่ถูกต้องได้ แก้ไขปัญหา.
Nigel Thorne

1

อีกความคิดสามปีต่อมา: เป็นไปได้ที่จะแสดงวัตถุด้วยกระแสข้อความโดยใช้ XML หรือ JSON ฉันชอบ JSON (เรียบง่าย) และมีโครงการออกมาเพื่อให้การสนับสนุน JSON แบบคลาสสิค * NIX ตัวอย่างเช่น: https://github.com/step-/JSON.awk

ปัญหาหนึ่งในการใช้แบบจำลองชนิดวัตถุสำหรับโปรแกรมคลาสสิค * NIX เช่น AWK คือพวกเขาไม่มีการสนับสนุน OO ตัวอย่างเช่นในขณะที่ AWK มีอาเรย์แบบเชื่อมโยงอาเรย์นั้นไม่ได้มีหลายมิติ (แต่ละองค์ประกอบในอาเรย์ AWK จะต้องเป็นตัวเลขหรือสตริง แต่อาเรย์นั้นไม่ได้รับอนุญาตให้เป็นวัตถุอาเรย์ใน AWK)


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