Kilka razy próbowałem nauczyć się skryptów powłoki (bash), ale odepchnęła mnie składnia. Potem znalazłem Pythona i byłem w stanie zrobić większość rzeczy, które skrypt powłoki może zrobić w Pythonie. Nie jestem teraz pewien, czy powinienem więcej poświęcać czasu na naukę skryptów powłoki. Więc chcę zapytać:
Jakie są mocne strony skryptów powłoki, które sprawiają, że jest to niezastąpione narzędzie w porównaniu z Pythonem?
Nie jestem z zawodu administratorem systemu, ale interesuje mnie konfigurowanie systemów Linux dla użytkowników domowych, dlatego myślę, że nauka skryptów powłoki może być konieczna.
bash
powłoka nie jest powszechnie dostępna we wszystkich dystrybucjach Linuksa, w szczególności w systemach wbudowanych i innych, w których działabusybox
plik wykonywalny. Skrypty, których celem jest sama powłoka Bourne'a, z którąbash
jest kompatybilna wstecz, będą działać na wszystkich systemach zgodnych z POSIX, jednak ten język jest znacznie bardziej ograniczony niż język implementowany przezbash
.„Jakie są mocne strony skryptów powłoki, które sprawiają, że jest to niezbędne narzędzie w porównaniu z Pythonem?”
Muszla nie jest niezbędna. Jak myślisz, dlaczego jest ich tak wielu? bash, tcsh, csh, sh itp.,
Python to powłoka. Nie ten, którego używałbyś do uruchamiania wszystkich poleceń, ale do tworzenia skryptów jest idealny.
Python jest mniej więcej standardową częścią wszystkich dystrybucji Linuksa.
Bardziej tradycyjne muszle robią zbyt wiele rzeczy.
Mają wygodny interfejs użytkownika do uruchamiania poleceń. Obejmuje to jednowierszowe polecenia, w których powłoka przeszukuje PATH, rozwidla i wykonuje żądany program. Obejmuje ona także rurociągi, sekwencji i programów współbieżnych (używając
;
,|
i&
), jak również pewne przekierowanie (z wykorzystaniem>
i<
).Mają kiepską, podobną do języka programowania możliwość uruchamiania skryptów. Ten język jest raczej trudny w użyciu i wyjątkowo nieefektywny. Większość wypowiedzi w tym języku wymaga rozwidlenia jednego lub więcej dodatkowych procesów, marnowania czasu i pamięci.
Uruchamianie programów z powłoki, przekierowywanie stderr do pliku dziennika i tego typu rzeczy są dobre. Zrób to w muszli.
Prawie wszystko inne można zrobić wydajniej i wyraźniej jako skrypt w Pythonie.
Potrzebujesz obu . Jednak nigdy nie powinieneś pisać skryptu z instrukcjami if lub pętlami w tradycyjnym języku powłoki.
źródło
if
instrukcja powłoki często wiąże się z uruchomieniemtest
programu. Powłoka to kiepski język programowania pod każdym względem.bash
co najmniej) mają poleceń wbudowanych do obsługi procesu decyzyjnego (nptest
jestbash
wbudowane, oprócz bardziej wszechstronny konstruktów). Z pewnością ma swoje słabości, ale i mocne strony. Warto również uczyć się szczegółowo, ponieważ jest to zupełnie inny paradygmat niż inne rodzaje języków.cat "$1" | ssh "$2" "cat - >\"$1\""
począłscp
. Wiedzieli, jak najlepiej go zaprojektować, ponieważ już go używali.Powłoka sprawia, że zwykłe i proste czynności są naprawdę proste, kosztem uczynienia bardziej złożonych rzeczy znacznie bardziej skomplikowanymi.
Zwykle mały skrypt powłoki będzie krótszy i prostszy niż odpowiadający mu program w języku Python, ale program w języku Python będzie miał tendencję do łagodnego akceptowania modyfikacji, podczas gdy skrypt powłoki będzie miał tendencję do coraz mniejszego utrzymania w miarę dodawania kodu.
Skutkuje to tym, że dla optymalnej codziennej produktywności potrzebujesz skryptów powłoki, ale powinieneś używać go głównie do jednorazowych skryptów i używać Pythona wszędzie indziej.
źródło
Ze skryptami powłoki nie można zrobić nic, czego nie można zrobić w Pythonie. Dużą zaletą skryptów powłoki jest to, że używasz tych samych poleceń, co podczas korzystania z powłoki, więc jeśli jesteś ciężkim użytkownikiem powłoki, skrypty powłoki w pewnym momencie staną się bardzo szybkim i łatwym sposobem na zautomatyzowanie pracy powłoki .
Łatwiej mi też radzić sobie z potokami danych w skryptach powłoki niż w Pythonie, chociaż jest to absolutnie wykonalne w Pythonie.
I wreszcie, nie musisz uruchamiać dodatkowego interpetera, aby uruchomić skrypty powłoki, co daje bardzo małą, ale czasami zauważalną przewagę szybkości i wykorzystania pamięci.
Ale z drugiej strony, skrypty Pythona są o wiele łatwiejsze w utrzymaniu, próbuję migrować z dużych, brzydkich skryptów powłoki do skryptów Pythona właśnie z tego powodu. W Pythonie łatwiej jest też obsługiwać wyjątki i QA.
źródło
nie trzeba uczyć się skryptów powłoki, jak wskazują wszystkie poprzednie odpowiedzi; ale uczenie się nigdy nie jest złe. to naprawdę kwestia osobistych priorytetów. komuś innemu bardzo trudno jest powiedzieć, co jest warte twojego czasu, a co nie.
większość programistów uważa, że nauka nowych języków za każdym razem staje się coraz łatwiejsza. (to samo dotyczy w dużej mierze także języków naturalnych). Im wcześniej zaczniesz, tym lepiej.
plus: nauka języka pozwala ekstrawagancko oddzielić jego ograniczenia od pozycji pełnej wiedzy i znajomości języka. to prawdopodobnie nie zapewni ci wyluzowania, ale może przynieść ci piwo od rówieśników!
źródło
Zgadzam się z większością poprzednich odpowiedzi. Uważam, że polecenia powłoki najlepiej nadają się do wykonywania zadań zorientowanych na system plików (kopiowanie i przenoszenie plików, grep itp.). Moim zdaniem powłoka jest lepsza, jeśli musisz czytać i zapisywać do pliku, ponieważ pojedyncze
>>file.txt
przekierowanie dołącza się natychmiast do pliku, zamiast np.file=open('file.txt','a'); file.write()
.Obecnie do użytku osobistego mieszam oba, tworząc skrypt Pythona i wywołując os.system ('command') lub os.popen ('command') za każdym razem, gdy jakaś akcja jest łatwiejsza w powłoce niż w Pythonie.
źródło
Powłoka jest dostępna wszędzie. Jeśli trzymasz się stosunkowo podstawowego zestawu funkcji przenośnych, twoje skrypty mogą działać na telefonach komórkowych, routerach bezprzewodowych, rejestratorach DVR, netbookach, stacjach roboczych, dużych żelaznych serwerach i tym podobnych. Python niekoniecznie jest dołączany po wyjęciu z pudełka w wielu systemach, aw zależności od środowiska może być trudno go zainstalować.
Zapoznanie się ze skryptami powłoki może również pomóc w nauce trików z wiersza poleceń, ponieważ wiersz poleceń jest, cóż, powłoką. Przydaje się również do zrobienia dość długiego i skomplikowanego wiersza poleceń i przekształcenia go w bardziej ogólny skrypt, gdy zdasz sobie sprawę, że będziesz go potrzebować bardziej.
Powłoka ma również kilka całkiem potężnych funkcji; potoki są naprawdę interesującą konstrukcją sterującą, która jest natywna tylko dla powłoki, o ile wiem.
źródło
Kolejną rzeczą do rozważenia przy wyborze skryptów powłoki Pythona jest wersja Pythona, która będzie działać na maszynach docelowych. RHEL5 (żeby wymienić jeden) będzie dostępny przez długi czas. RHEL5 utknął w Pythonie 2.4. Istnieje wiele fajnych bibliotek, które zależą od funkcjonalności dodanej do Pythona po wersji 2.4.
źródło