PowerShell'in Unix eşdeğeri?


21

Karmaşık kabuk komutları metin çıktısını AWK ile ayrıştırmayı içerdiğinde her zaman garip buldum . Temel olarak, yapılandırılmış veriyi metne dönüştürüyoruz, sonra yapılandırılmış verilere geri dönmek için metni tekrar ayrıştırıyoruz.

PowerShell , yazılan nesneleri sadece metin yerine kabuk komutları arasında yönlendirebilmenizi sağlayarak bu sorunu önleyen bir Windows kabuğudir.

PowerShell gibi, metin tabanlı yerine nesne tabanlı olan Unix kabukları var mı?

Yanıtlar:


24

Hayır, tam tersi. Kaşık yok ^ H ^ H ^ Yapılandırılmış veri. Sadece metin var.

Unix felsefesinin büyük bir kısmı, metin çıktısı alma ve metni girdi olarak kabul etme fikrine dayanır. Bu konuda güzel bir açıklaması olan " Unix Programlama Sanatı " kitabını okumayı düşünebilirsiniz .

Beni yanlış anlama: Anladığını anlıyorum ve ne almaya çalıştığını biliyorum. Ruby ve Python'un etkileşimli tercümanları gibi, kabuk olarak kullanılabilecek şeyler var, ancak Bash kadar basit işler için uygun değiller. Örneğin, dizini değiştirmeyi deneyin.

Ayrıca, bir kabuğun içindeki nesneleri kullanmak hepsi bu kadar değil. Bunu sadece kabuğunuz destekliyorsa, Unix'te kaybedersiniz. Tüm standart Unix metin işleme araçlarının grep, awk, sed vb. Gibi değiştirilmesi gerekir.

Birkaç yıl önce böyle bir şey yaratma girişiminde bulunduğumu düşünüyorum, ancak adını hatırlayamıyorum ve uzun zamandır duymuyorum. Muhtemelen havalanmayacak.


2
İlginç bir şekilde, metin akışlarını (veya aslında bayt akışlarını) veri nesnesi akışlarıyla değiştirmek, kitapta formüle edilen genel ilkelere aykırı olmaz. “Temsil kuralı” ile daha iyi oynuyor gibi görünüyor. Sadece unix, programlar arasındaki arayüz olarak metin akışlarını seçti.
Wim Coenen

1
Fakat 'data nesnesi' ile gerçek bir Python / Ruby / C ++ nesnesi veya C yapı gibi bir şey mi kastediyorsunuz?
saat

3
+1 "Kaşığı bükmeye çalışma, bu imkansız. Bunun yerine sadece gerçeği anlamaya çalışın ... kaşık yok." Arayüz kadar metin değil , bir arayüz olarak veri akışları . Nesneleri programlama için güzel, ama bazen aklını koymak için küçük bir hapishane haline gelirler ...
Avery Payne

2
zsh> bash. Benim fikrim ama gerçekten zsh denemediyseniz yapmalısınız
xenoterracide

2
@WimCoenen, “yapılandırılmış veri” etrafında nakliye, herkes ve Tillie teyzenin “yapı” nın ne olduğu konusunda hemfikir olması gerektiği anlamına gelir. Gibi şeyler bile ls(1). Tamamen işe yaramaz.
von 20rand,


4

PowerShell: Hotwire ile hedefi aynı olan bir proje var . Normal sh komutunu python komut dosyası ve pencere / grafik ortamı ile birleştirir. Bir bakabilirsin.

Var olan programları silerek veya Python kütüphanelerini kullanarak kendi nesnelerinizle genişletebileceğiniz nesne yönelimli boru hattı üzerine kuruludur .


1
Adı hatırlamaya çalıştığım proje bu!
Bagajdaki

4

PowerShell 2016 yılında açık kaynak oldu. O zamandan beri gittikçe daha fazla çok platformlu hale geldi. Kaynak kodu GitHub'da mevcuttur ve UNIX benzeri sistemler için yükleme paketleri de vardır.


1

Bunların çoğunu, bir grup yorumlanmış (veya derlenmiş) senaryo yazarak, sonra onları tercümanın kabuğuna çağırıp, nesnelerinizi geri getirecek veya koruyacak vb.

Bunu en azından Ruby, Perl, Python, Haskell (örn., GHCi), JavaScript (örneğin, node.js), Matlab ve kesinlikle başka dillerde yapabilirsiniz.


Borunun nesnesi, tembel değerlendirme vb. Yapabileceğiniz anlamına gelir. Dolayısıyla, bir borunun altından bir dizi dosya nesnesi geçiriyorsanız .. belki adını veya değiştirilen tarihi, belki de içeriğini umursuyorsunuz. JSON'da hangi verileri aktarıyorsunuz? Cevap: bağlıdır. Borunun tüketicisi veri alırsa, doğru verileri talep edebilir. Sorun çözüldü.
Nigel Thorne

1

Üç yıl sonra başka bir düşünce: XML veya JSON kullanarak bir nesneyi metin akışlı olarak göstermek mümkündür. JSON'u (basit) tercih ediyorum ve gerçekten de klasik * NIX yardımcı programlarına JSON desteği verecek projeler var. Örneğin: https://github.com/step-/JSON.awk

AWK gibi klasik * NIX programları için nesne tipi model kullanmanın bir sorunu, gerçekten OO desteğine sahip olmamasıdır. Örneğin, AWK'nın ilişkisel dizileri olmasına rağmen, diziler çok boyutlu değildir (bir AWK dizisindeki her öğenin bir sayı veya dize olması gerekir; bir dizinin AWK'de bir dizi nesnesi olmasına izin verilmez).


Clojure, JSON sınırlıyken, her türden yazılan verinin seri hale getirilmesini / seri hale getirilmesini sağlayan edn sunar.
Mario
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.