Setara dengan Unix dari PowerShell?

21

Saya selalu merasa canggung ketika perintah shell kompleks melibatkan parsing output teks dengan AWK . Pada dasarnya kami mengonversi data terstruktur menjadi teks, lalu mem-parsing teks lagi untuk kembali ke data terstruktur.

PowerShell adalah shell Windows yang menghindari masalah itu dengan memungkinkan Anda untuk menyalurkan objek yang diketik di antara perintah shell alih-alih hanya teks.

Apakah ada shell Unix yang berbasis objek bukan berbasis teks, seperti PowerShell?

Wim Coenen
sumber

Jawaban:

24

Tidak, itu sebaliknya. Tidak ada sendok ^ H ^ H ^ Data terstruktur. Hanya ada teks.

Sebagian besar dari filosofi Unix didasarkan pada ide menghasilkan teks dan menerima teks sebagai input. Anda mungkin ingin mempertimbangkan membaca " The Art of Unix Programming ", yang memiliki penjelasan yang bagus tentang ini.

Jangan salah paham: Saya mengerti maksud Anda dan saya tahu apa yang ingin Anda sampaikan. Ada beberapa hal seperti interpreter interaktif dari Ruby dan Python, yang dapat digunakan sebagai shell, tetapi mereka tidak ramah untuk tugas-tugas dasar seperti Bash. Coba dan ubah direktori, misalnya.

Juga, menggunakan benda-benda di shell tidak semua itu. Jika hanya shell Anda yang mendukung ini, di Unix, Anda akan bingung. Semua alat manipulasi teks Unix standar harus diubah, seperti grep, awk, sed, dll.

Saya pikir telah ada upaya untuk membuat sesuatu seperti ini beberapa tahun yang lalu, tetapi saya tidak dapat mengingat namanya dan saya belum pernah mendengarnya dalam waktu yang lama. Mungkin tidak akan lepas landas.

wzzrd
sumber
2
Menariknya, mengganti aliran teks (atau sebenarnya, aliran byte) dengan aliran objek data tidak akan bertentangan dengan prinsip-prinsip umum yang dirumuskan dalam buku ini. Bahkan tampaknya bermain lebih baik dengan "aturan representasi". Hanya saja unix telah memilih stream teks sebagai antarmuka antar program.
Wim Coenen
1
Tetapi dengan 'objek data' maksud Anda objek Python / Ruby / C ++ yang sebenarnya atau sesuatu seperti C struct?
wzzrd
3
+1 "Jangan mencoba menekuk sendok, itu tidak mungkin. Alih-alih hanya mencoba untuk menyadari kebenaran ... tidak ada sendok." Ini tidak begitu banyak teks-sebagai-an-antarmuka, tetapi aliran data sebagai antarmuka. Objek bagus untuk pemrograman, tetapi kadang-kadang itu menjadi penjara kecil kecil untuk memasukkan pikiran Anda ke ...
Avery Payne
2
zsh> bash. Pendapat saya tetapi benar-benar jika Anda belum mencoba zsh Anda harus
xenoterracide
2
@WimCoenen, mengirim sekitar "data terstruktur" berarti semua orang dan bibi Tillie harus menyetujui apa "struktur" itu. Bahkan hal-hal seperti ls(1). Benar-benar tidak berguna.
vonbrand
10

Sebenarnya ada proyek yang disebut Pash yang bertujuan untuk mengimplementasikan PowerShell (di atas Mono), tetapi tampaknya telah terhenti.

Tandai Probst
sumber
2
peretas unix menghabiskan waktu untuk proyek berbasis microsoft = itulah semut dan belalang lagi
ixtmixilix
4
Kami kembali dari kematian: github.com/JayBazuzi/Pash , twitter.com/PashProject
Jay Bazuzi
4

Ada sebuah proyek, yang tujuannya memiliki kesamaan dengan PowerShell: Hotwire . Ini menggabungkan sh reguler dengan skrip python dan jendela / lingkungan grafis. Anda bisa melihatnya.

Ini didasarkan di sekitar pipa berorientasi objek yang Anda dapat memperluas dengan objek Anda sendiri dengan membungkus program yang ada atau menggunakan pustaka Python.

elmarco
sumber
1
Itulah proyek yang saya coba ingat namanya! Komit terakhir di trunk: dua tahun lalu ...
wzzrd
4

PowerShell menjadi open-source pada 2016. Sejak saat itu semakin banyak multi-platform. Kode sumber tersedia di GitHub dan begitu pula menginstal paket untuk sejumlah sistem mirip UNIX.

Tomasz
sumber
1

Saya pikir Anda bisa menyelesaikan sebagian besar itu dengan menulis banyak skrip yang ditafsirkan (atau dikompilasi), kemudian memasukkannya ke dalam shell juru bahasa, yang akan mengembalikan atau melindungi objek Anda dan seterusnya jika Anda mau.

Anda dapat melakukan ini setidaknya dalam Ruby, Perl, Python, Haskell (mis., GHCi), JavaScript (mis., Node.js), Matlab, dan tentu saja bahasa lain ...

Kevin Cantu
sumber
Pipa menjadi objek berarti Anda dapat melakukan evaluasi malas dll. Jadi, jika Anda melewatkan satu set objek file ke pipa .. mungkin Anda peduli dengan nama, atau tanggal yang dimodifikasi, tetapi mungkin isinya. Data apa yang Anda berikan di JSON? Jawab: itu tergantung. Jika pengguna pipa menarik data, ia dapat meminta data yang benar. Masalah terpecahkan.
Nigel Thorne
1

Pemikiran lain tiga tahun kemudian: Dimungkinkan untuk mewakili objek dengan aliran teks menggunakan XML atau JSON. Saya lebih suka JSON (lebih sederhana), dan, memang ada proyek di luar sana untuk memberikan utilitas JSON * NIX klasik. Misalnya: https://github.com/step-/JSON.awk

Satu masalah dengan menggunakan model tipe objek untuk program * NIX klasik seperti AWK adalah bahwa mereka benar-benar tidak memiliki dukungan OO. Sebagai contoh, sementara AWK memiliki array asosiatif, array tidak multi-dimensi (setiap elemen dalam array AWK harus berupa angka atau string; array tidak diperbolehkan menjadi objek array di AWK).

samiam
sumber
Clojure menawarkan edn yang memungkinkan semua jenis data yang diketikkan untuk serial / deserialized sementara JSON terbatas.
Mario