PowerShell ve Unix Kabuğu


14

PowerShell'in özellikleri hakkında bazı şeyler duydum. Bazıları Unix mermilerinin tipik özellikleri gibi görünüyor.

Görünüşe göre Powershell, kabuk komut dosyalarına benzer şekilde boru ve komut dosyaları içeriyor. Ama henüz denemedim (Windows yok), bu yüzden yanlış olabilirim.

Benim sorum şu: Powershell bir Unix kabuğuna benzer mi yoksa konsept farklı mı?
İkincisi ise: Kavram hangi noktalarda farklılık gösterir?


2
Bu soru zaten StackOverflow üzerinde sorulmuştur: stackoverflow.com/questions/573623/powershell-vs-unix-shells
Richard

Yanıtlar:


20

PowerShell, yüzeysel olarak Unix mermilerine benzer. PowerShell, Unix'te alışkın olduğunuz komutların çoğu için ls, rm, cp, mv vb. Gibi takma adlara sahiptir. Bununla birlikte, takma adların arkasındaki cmdlet'lerin çalışma şekli oldukça farklıdır.

* Nix kabuğunda, her şey metin tabanlıdır, bu nedenle bir komuttan çıktı başka bir boruya iletilebilir, ancak alıcı program, metnin boru hattından nasıl ayrıştırılacağını / yorumlanacağını bilmelidir. Bu PowerShell ve * nix kabukları arasındaki temel farktır ... PowerShell'de, etrafta dolaşan her şey bir nesnedir.

Bunun sonucu, bir komuttan diğerine yapılan boruların sadece stdout'u stdin'e borulaması olmadığıdır. Alıcıya tam teşekküllü bir .net nesnesini pipetliyor. Bu nedenle, alıcının sadece bu tür bir nesnenin nasıl işleneceğini bilmesi gerekir. Herhangi bir metin ayrıştırma uygulaması gerekmez, ancak giriş nesnesinin yöntemlerini ve özelliklerini (üyelerini) nasıl çağıracağını anlamalıdır.

* Nix komut satırı programında, stdin'den okunan ve başka bir programın oluşturduğu metinden bilgilerini ayrıştıran bir kod yazarsınız. PowerShell'de şöyle bir şey yaparsınız:

function changeName($myObject)
{
    if ($myObject.GetType() -eq [MyType])
    {
        #print the current name to screen
        $myObject.Name
        #change string in the 'name' property
        $myObject.Name = "NewName"
    }
    return $myObject
}

Bu kodu komut satırında çağırmak şöyle görünebilir:

PS> $myObject = New-Object MyType -arg "OriginalName"
PS> $myObject = changeName $myNewObject
OriginalName
PS> $myObject.Name
NewName

Borulama mekanizmasını kullanarak yukarıdakiyle aynı şeyi yapabilirsiniz, ancak burada metni değil bir nesneyi geçirmemizdeki en büyük farkı görebilirsiniz:

PS> $myObject = New-Object MyType -arg "OriginalName" | changeName
OriginalName
PS> $myObject.Name
NewName

Bu büyük farkı unutmadan, diğer yüzeysel benzerlikler olduğunu söyleyebilirim, ancak çoğunlukla sözdizimsel olarak. PowerShell sözdizimi * nix shell kullanıcıları göz önünde bulundurularak tasarlanmıştır, bu nedenle dil stilinin çoğu benzerdir.

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.