Сильні сторони сценаріїв оболонки порівняно з Python [закрито]


94

Я кілька разів намагався вивчити сценарії оболонки (bash), але синтаксис був відхилений. Тоді я знайшов Python і зміг зробити більшість речей, які сценарій оболонки може зробити в Python. Зараз я не впевнений, чи варто більше вкладати свій час у вивчення графіки оболонок. Тому я хочу запитати:

Які сильні сторони сценаріїв оболонок роблять її незамінним інструментом порівняно з Python?

Я не є адміністратором системи за професією, але мені цікаво створити системи Linux для домашніх користувачів, отже, я думаю, що вивчення сценаріїв оболонок може стати необхідним.

Відповіді:


82
  • Сценарії оболонки мають простіші позначення для перенаправлення вводу-виводу.
  • Створити конвеєри з існуючих програм в оболонці простіше простого.
  • Сценарій оболонки повторно використовує цілі програми.
  • Оболонка є загальнодоступною (на будь-якому схожому на Unix) - Python не обов'язково встановлюється.

"Це правда, що ви можете робити все в Python, що ви можете робити в оболонці; Це також правда, що в Python є речі, які важко захищаються від оболонки (так само, як є речі, прості в оболонці, але важкі в Python). Знання обох буде найкращим у довгостроковій перспективі.


16
1 і 2, хороші бали. №3 - це слабкість, оскільки це призводить до великих витрат, яких може уникнути Python. No4 може бути в основному неправдивим. Python є частиною більшості дистрибутивів Linux зараз.
S.Lott

1
@Svante: напишіть простий цикл оболонки, щоб виконати ряд операцій, використовуючи такі команди, як "test" та "expr", і порівняйте час виконання з сценарієм Python, який використовує модуль "os". Команди, такі як test і expr, часто передбачають розгалуження підпроцесу для реальної роботи.
S.Lott

2
Я бачу пункт 3 як величезну перевагу, а не як недолік. Наприклад, розгляньте зміну розміру каталогу, наповненого зображеннями, за допомогою програми перетворення.
Гленн

7
Також примітним щодо №4 є те, що bashоболонка спеціально не є загальнодоступною на всіх дистрибутивах Linux, зокрема тих, що вбудовані системи, та інших, що виконують busyboxвиконуваний файл. Скрипти, націлені на саму оболонку Борна, із bashзворотно сумісною, будуть працювати у всіх системах, сумісних з POSIX, однак ця мова є набагато обмеженішою, ніж реалізована bash.
інтуїція

5
@intuited: eval "$ (історія 2 | голова -1 | perl -pe 's / (? <= що є) швидше за все / принаймні /')"; історія -d $ (історія 2 | голова -1 | sed 's / ^ \ s * ([0-9] \ +) / \ 1 /')
інтуїтивно

54

"Які сильні сторони сценарію оболонки роблять її незамінним інструментом порівняно з Python?"

Шкаралупа не є незамінною. Чому, на вашу думку, їх так багато? bash, tcsh, csh, sh тощо тощо, тощо,

Python - це оболонка. Не той, який ви використовуєте для запуску всіх команд, але для сценаріїв, це ідеально.

Python - це більш-менш стандартна частина всіх дистрибутивів Linux.

Більш традиційні снаряди роблять занадто багато речей.

  1. У них зручний інтерфейс користувача для запуску команд. Сюди входять однорядкові команди, де оболонка шукає ваш PATH, форкує та виконує потрібну програму. Вона також включає в себе трубопроводи, послідовності і паралельних програм ( з використанням ;, |а &), а також деякі перенаправлення ( з допомогою >і <).

  2. Вони мають крихку малу можливість програмування для запуску скриптів. Ця мова є досить важкою у використанні та надзвичайно неефективною. Більшість висловлювань цією мовою вимагають розблокування одного або декількох додаткових процесів, витрачання часу та пам'яті.

Запуск програм із оболонки, перенаправлення stderr до файлу журналу, і таке добре. Зробіть це в оболонці.

Майже все інше можна зробити більш ефективно та чіткіше як скрипт Python.

Вам потрібно і те, і інше . Однак ніколи не слід писати сценарій із if-операторами або циклами традиційною мовою оболонки.


1
@intuited. А) Поширення різних оболонок свідчить про кількість ознак, що вбудовуються в «оболонку»; це не суттєва роль, але це все-таки привабливі функції. Б) Інтерпретатор python - це належна оболонка unix, вона використовує # !. В) "Простий" ifвислів оболонки часто передбачає запуск testпрограми. Оболонка - це брудна мова програмування у всіх відношеннях.
S.Lott

4
@S. Лотт: Схоже, тут є певний смисловий дисонанс. Моє визначення оболонки UNIX було б інтерпретатором, мова якого насамперед спрямована на контроль на високому рівні роботи системи UNIX. Згідно з цим визначенням, якась оболонка, безумовно, є дуже важливою для роботи системи UNIX, і Python не відповідає вимогам. Як би ви визначили цей термін?
інтуїція

1
@ S.Lott: Я не є величезним прихильником синтаксису, який використовується в традиційному сценарії оболонок, але я вважаю його досить корисним і доцільним у багатьох ситуаціях, коли головна мета - це контролювати процеси та потік їх результатів. Це часто вимагає прийняття рішень та повторення. Сучасні оболонки ( bashпринаймні) мають вбудовані елементи для прийняття рішень (наприклад test, це bashвбудований додаток, крім більш універсальних конструкцій). Він, безумовно, має свої слабкі сторони, але і свої сильні сторони. Варто також детально вивчити, оскільки вона має зовсім іншу парадигму, ніж інші види мов.
інтуїція

1
@intuited: "знайти його цілком придатним для використання" - це салют вашій майстерності, а не брутальній мові. Python може бути більш корисним для людей, які не такі кваліфіковані.
С.Лотт

3
@ S.Lott: Цікаво, у вас є зовсім інша філософія, ніж у мене. Я вважаю, що дизайн і операції - це в основному кури та яйця. Це означає, що скрипт оболонки - це програма, яка запускає програми. Багато з цих програм спочатку реалізовувались як все складніші сценарії оболонки. У якийсь момент це стало вартим, напевно, стільки ж для ефективності, як модульність, щоб деякі з них були переписані на C, а пізніше і на Python. Наприклад: в якийсь момент cat "$1" | ssh "$2" "cat - >\"$1\""породив scp. Вони знали, як найкраще його розробити, оскільки вже використовували його.
інтуїція

31

Оболонка робить звичайні та прості дії дійсно простими, за рахунок того, щоб зробити більш складні речі набагато складнішими.

Як правило, невеликий сценарій оболонки буде коротшим і простішим, ніж відповідна програма python, але програма python буде прагнути витончено приймати модифікації, тоді як сценарій оболонки буде мати тенденцію ставати все менш і менш ремонтопридатним у міру додавання коду.

Це призводить до того, що для оптимальної щоденної продуктивності вам потрібен сценарій оболонки, але ви повинні використовувати його в основному для сценаріїв, що викидаються, і використовувати python скрізь.


14

З скриптами оболонки ви нічого не можете зробити, що не можна зробити з python. Велика перевага сценаріїв оболонки полягає в тому, що ви використовуєте ті самі команди, що і при використанні оболонки, тому, якщо ви важкий користувач оболонки, сценарії оболонки в якийсь момент стануть дуже швидким і простим способом автоматизації роботи оболонки .

Мені також легше працювати з трубами даних у скриптах оболонки, ніж у python, хоча це можливо зробити з python.

І, нарешті, вам не потрібно запускати додатковий інтерпетер для запуску сценаріїв оболонки, даючи вам дуже малу, але іноді, можливо, помітну перевагу у швидкості та використанні пам'яті.

Але знову ж таки, сценарії Python є набагато більш ретельними, я саме тому намагаюся перейти з великих потворних скриптів оболонки до сценаріїв Python. Також простіше зробити обробку винятків та забезпечення якості за допомогою Python.


9

не потрібно вивчати сценарії оболонки, як свідчать усі попередні відповіді; але навчання ніколи не буває поганим. це справді питання особистих пріоритетів. комусь іншому дуже важко сказати, що є, а що не варте свого часу.

Більшість програмістів вважають, що вивчення нових мов щоразу стає простішим. (те саме стосується і природних мов.) і чим раніше ви почнете, тим краще.

плюс: засвоєння мови дозволяє екстравагантно скинути її обмеження з позиції повного знання та знайомства. це, мабуть, не допоможе вам заробити, але може заробити пиво у своїх однолітків!


8

Я погоджуюсь з більшістю попередніх відповідей. Я вважаю команди оболонки найбільш підходящими для виконання завдань, орієнтованих на файлову систему (копіювання та переміщення файлів, grep тощо). На мою думку, оболонка краще, якщо вам доведеться читати та писати у файл, оскільки одне >>file.txtпереспрямування додається до файлу миттєво, замість того, щоб вимагати, скажімо,file=open('file.txt','a'); file.write() , тощо.

В даний час для мого особистого використання я змішую обоє, створюючи скрипт python і викликаючи os.system ('команда') або os.popen ('команда') кожен раз, коли якась дія простіша в оболонці, ніж у python.


6

Оболонка доступна скрізь. Якщо ви дотримуєтесь відносно базового набору портативних функціональних можливостей, ваші сценарії можуть працювати на мобільних телефонах, бездротових маршрутизаторах, відеореєстраторах, нетбуках, робочих станціях, великих залізних серверах тощо. Python не обов’язково входить у комплект із багатьма системами, і в залежності від середовища його може бути важко встановити.

Вивчення деяких сценаріїв оболонки також може допомогти вам навчитися деяким прийомам командного рядка, оскільки командний рядок - це оболонка. Це також добре для того, щоб взяти якийсь досить довгий і складний командний рядок і перетворити його на більш загальний сценарій після того, як ви зрозумієте, що він вам знадобиться ще.

Оболонка також має кілька досить потужних функцій; трубопроводи - це дійсно цікава конструкція управління, яка є нативною лише для оболонки, наскільки я знаю.


5

Інша річ, яку слід враховувати при виборі скриптів оболонки Python - це версія Python, яка працюватиме на цільових машинах. RHEL5 (щоб назвати одного) буде довгий час. RHEL5 застряг з Python 2.4. Є багато приємних бібліотек, які залежать від функціональності, доданого до Python після 2.4.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.