2009-06-01 8 views
27

Używam basha i robię to od ponad dekady - ale od czasu do czasu zastanawiam się, czy w świecie Linuksa pojawiły się jakieś nowe, znaczące zmiany.Lepsza powłoka systemu Linux?

Kilka lat temu Microsoft wydał PowerShell, co wydawało się bardzo interesujące. Czy w powłokach Linuksa dzieje się coś podobnego?

+9

Które funkcje brakuje w bash vs są dostępne w innych powłokach, które uważasz za innowacyjne? Co ważniejsze, czy widzisz funkcje, które uważasz, że pomogłyby ci zrobić to, na co zostały napisane? Na przykład. z mojego punktu widzenia bash jest interfejsem wiersza poleceń, umożliwiającym dostęp do zasobów systemu operacyjnego, z którego punktu widzenia brakuje funkcjonalności? – stefanB

+0

Być może jest to sposób na pozostawanie w filozofii Unixa przy użyciu małych narzędzi, które wykonują określone rzeczy bardzo dobrze (w przeciwieństwie do dużych narzędzi, które robią wszystko źle). –

+2

to puszka robaków .. otwórz ją ostrożnie .. – sybreon

Odpowiedz

6

Możesz uruchomić PowerShell na Linuksie przez Pash. Używa Mono tak, jak PowerShell używa .NET.

8

Chciałbym rzucić okiem na Zsh lub Fish Shell.

+0

Jedna uwaga dotycząca zsh i fishshell to, że nie wolno nam używać ich w pracy. I nie wydaje mi się, żeby był sam. Więc chociaż są mili, nie są tak cenne jak bash w miejscu pracy, chyba że możesz sam wybrać. –

+5

Wygląda na to, że zmiana muszli będzie łatwa. Nie musisz mieć go jako powłoki logowania, możesz po prostu uruchomić go po zalogowaniu. – stimms

6

Myślę, że "oryginalna poprawiona powłoka" to ksh93. bash powstało w czasie, gdy kod źródłowy ksh był prawnie zastrzeżony; jeśli ksh był wtedy open-source, to nie musiałoby być konieczne posiadanie nowej powłoki (choć z FSF nigdy nie wiadomo). ksh jest wart nauki, szczególnie ze względu na możliwość rozszerzenia go o moduły C, ale nie jest to wyraźna zwyżka. Autouzupełnianie basha jest wyraźnie lepsze, co może być wystarczające, by ogólnie wygrać bash. W każdym razie bash i ksh poczyniły znaczne wysiłki, aby się zjednać, więc różnice są niewielkie.

Inną interesującą powłoką jest zsh, która stara się być wszystkim, czym jest ksh, jednocześnie włączając csh. Ponieważ nigdy nie widziałem żadnego punktu ani nie używam csh, nie jestem odpowiednią osobą, by bronić zsh. Zwrócę uwagę na jedną nietypową niezgodność: domyślnie w zsh zmienna zawsze rozwija się do pojedynczego tokena, nawet jeśli zawiera spacje. Takie zachowanie jest niekompatybilne ze wszystkimi innymi pociskami pochodzącymi z sh, a czasami jest niewygodne, ale naprawdę ma o wiele więcej sensu niż oryginał i oszczędza wielu cytatów.

csh był pierwszą powłoką, która miała kontrolę pracy, ale moim zdaniem (i jej następcy) została zastąpiona przez bash i ksh. Pisanie scenariuszy nigdy nie było zabawne.

Wreszcie, istnieje wiele małych muszelek zaprojektowanych dla dyskietek ratunkowych (!) I innych środowisk Spartan, ale brzmi to tak, jakbyś nie był nimi zainteresowany.

(W kwestii innowacji, powinienem dodać, że ponad połowa skryptów, które pisałem jako skrypty powłoki, to teraz skrypty Lua. Inne mogą powiedzieć to samo dla Pythona lub Ruby, lub z powrotem w dzień, Perl lub Tcl: Więc myślę, że prawdziwą innowacją jest migracja z powłoki, aby możliwa była programowalna interakcja w wierszu poleceń.)

+1

ksh (lub pdksh) jest bardzo łatwy do zhakowania, w rzeczywistości możesz połączyć go z tym samym edytorem linii i biblioteką autouzupełniania bash używa. To, czego nie otrzymamy, to wszystkie rozszerzenia GNU wykraczające poza POSIX (tj. Tablice asocjacyjne w bash 4.0). W dowolnej powłoce łatwo można zmienić parser/gramatykę, aby używać nowoczesnego języka na linii poleceń. Jeśli używasz google do "niebieskiego języka programowania", zobaczysz, jak łatwo jest wpaść do bash. –

3

IIRC, Powershell to obiekt zorientowany obiektowo, podczas gdy większość powłok i narzędzi unix działa na tekście. W związku z tym, Squirrel Shell może Cię zainteresować. Ale nigdy tego nie używałem.

20

Czy zdajesz sobie sprawę, że bash 4 został niedawno wydany z dużą ilością nowych funkcji i dodatków językowych?

  • Opcje Shell globstar (**/foo) robi rekurencyjne przeszukiwanie, dirspell poprawki literówek podczas rozwijania nazw plików.
  • Tablice asocjacyjne, ciągi map do ciągów znaków, a nie tylko liczby do łańcuchów.
  • Opcja powłoki umożliwia zmianę katalogów po prostu wpisując ścieżkę do katalogu zamiast umieszczania przed nią cd.
  • Coprocesses
  • &>> i |& operatory przekierowania przekierowujące obu stdout i stderr
  • Mnóstwo dodatków do istniejących builtins dla poprawy wygody skryptów.

Check out:

3

Jeśli ’ re gotowi stracić kompatybilność z sh, możesz spojrzeć na użycie języka skryptowego, takiego jak Python lub Tcl jako powłoki. rlwrap może być bardzo przydatny, jeśli interpreter nie zapewnia edycji wiersza, historii poleceń, ukończenia itp.

Jedną z filozofii dotyczących powłok jest to, że powinny one być używane przede wszystkim do łączenia procesów z plikami (here is one page that espouses that approach). To powiedziawszy, ludzie napisali kilka niezwykle skomplikowanych programów z nich korzystających.

7

Jedną z najmniej reklamowanych cech Basha (i kilku innych powłok) jest możliwość zapisania własnych ładunków, a ich powłoki uruchamiają jako wbudowane.

Powiedzmy piszesz ładowalnych „na” .. i chcesz go do pracy tak:

on node 123 run some command 
on class nodes run some command 
on all nodes run some command 

... itd ..

Możesz śledzić proste przykłady, jak pisać do załadowania, a następnie włączyć go jako bash zbudowany poprzez umożliwić -f/path/to/obciążana loadable_name

tak więc w naszym przypadku, włącz -f/opt/bash/loadables/na na

... w twoim bashrc i masz to.

Tak więc, jeśli chcesz, aby bash zinterpretował twój nowy, natywnie nowy język, napiszesz ładowalny nazwany "use" lub "switch_to", a następnie zmodyfikuj parser tak, by ładował inną gramatykę/środowisko wykonawcze, jeśli określona zmienna zestaw.

tj .:

#/bin/bash 

switch_to my-way-cool-language 

funkyfunc Zippy(int p) [[ 
    jive.wassup(p) ]] 

Większość ludzi nie będzie chciał włamać swoją skorupę, jednak. Chciałem podkreślić, że istnieją urządzenia, które pozwalają Bashowi działać tak, jak sobie tego życzysz, bez zbytniego klekotania za pomocą kodu źródłowego.

Zobacz/path-to-bash-source/examples/loadables, możesz to zrobić, aby latać tam, gdzie pracujesz, ponieważ wciąż używasz Bash.

+2

Dobrym przykładem tego jest René Rebe [Lua Bash] (http://freshmeat.net/projects/luabash/), który jest ładowalny, który definiuje wbudowaną 'luabash', która wykonuje Luę, oraz pewną infrastrukturę dla dodawanie kolejnych wbudowanych & c. [Przykład] (http://svn.exactcode.de/t2/trunk/misc/luabash/example/example.sh) daje pewne pojęcie o tym, co się dzieje. –

+0

@Charles - To naprawdę doskonały przykład! –

2

Pociski nie są bardziej innowacyjne niż Scheme Schell. Cała moc Schematu połączona z możliwością uruchamiania poleceń Unixa i wbudowanego interpretera awk (oczywiście napisanego w Schemacie). Jedyną wadą jest to, że potrzebuje niewielkiego kawałka patching do zbudowania na 64-bitowym systemie Linux.

To nie jest dokładnie Bourne-shell, ale jest inny. Oczywiście musisz nauczyć się Schematu - bonusu!