LINUX.ORG.RU

Почему Bash'ism это плохо?

 


0

3

Неоднократно слышал от людей что башизм это плохо и прочее бла-бла-бла про Bash, скажите пожалуйста, почему?

Все говрят — пиши, чтобы было «POSIX shell»-совместимо.

Окей, а как? В памяти держать все ньюасы не хочу, оно того не стоит, когда Bash установлен на 99.9% линукс-систем. Стоит ли вообще заботиться о «POSIX shell» совместимости при написании скриптов? И ради чего? Какова вероятность, что твоим скриптом воспользуется некто на каком-нибудь Dash или Ash.

Допустим, я готов начать писать «правильно», подскажите как? sh вляется симлинком на bash поэтому запустив sh и выполнив команду, которая является «башизмом», она всё равно срабатывает.

Можно ли как-то принудительно ограничить возможности Bash, чтобы он стал Ъ-POSIX shell-совместимым?

И какие подводные камни? Стоит ли ожидать, что в итоге в каком-нибудь Arch Linux сломаются системные скрипты? (лол), зачем тогда POSIX shell так пиарят красноглазики (в плохом смысле этого слова)...

★★★★★

явный #!/bin/bash в начале скрипта остудит твои девичьи страдания

anonymous ()

ограничить возможности Bash, чтобы он стал Ъ-POSIX shell-совместимым?

Интересный вопрос. Пишут, что:

Bash will run in POSIX-compliant mode if the POSIXLY_CORRECT environment variable is set. From the manpage:

   POSIXLY_CORRECT
          If  this  variable  is  in the environment when bash starts, the
          shell enters posix mode before reading the startup files, as  if
          the  --posix  invocation option had been supplied.  If it is set
          while the shell is running, bash enables posix mode, as  if  the
          command set -o posix had been executed.
Many other GNU utilities will also honor POSIXLY_CORRECT, so if you're on a system with predominantly GNU tools (e.g. most Linux systems), this is a good start if your goal is POSIX conformance.

Видимо, надо виртуалку держать с этой опцией, иначе что-нибудь отвалится в самый неподходящий момент.

tlx ★★★★★ ()
Ответ на: комментарий от tlx

надо виртуалку держать с этой опцией

или просто прописать её в пользовательский ~/.bashrc, а не общесистемно, you dummy

anonymous ()

башизм это плохо и прочее бла-бла-бла про Bash, скажите пожалуйста, почему?

Потому что твои скрипты будут неправильно работать на АЭС под управлением QNX, почему же ещё
А раз они там не работают нормально, то нах они вообще нужны

zolden ★★★★★ ()
Ответ на: комментарий от Goury

Да, да, а когда у пользователя пистон3 а ты писал под пистон2 или наоборот. Ил у пользователя вообщ пистона нет. Или две версии, но симлинки на не ту выставлены. Да, да, пиши на пистоне.

sambist ★★ ()

Потому-что после сбегания на фряху скрипты не взлетят на csh. Можно конечно и там bash установить, но зачем?

Lavos ★★★★★ ()

Атавизм. На всех актуальных больших юниксах, а кроме линукса это - аикс, соляра и фрибсд, баш стоит. В линуксе он входит в LSB и никуда не денется. Единственная не дохлая система, где его нет в дефолте, это Андроид.

Хотя, на прошлой работе мы только под ksh писали. Но это - заморочки одной отдельно взятой конторы.

alex_the_v ★★★ ()
Ответ на: комментарий от sambist

симлинки на не ту выставлены

ещё какую-нибудь херь выдумай

anonymous ()
Ответ на: комментарий от zolden

АЭС под управлением QNX

И в банках, что на HP-UX с KornShell'ами тормо^Wработают.

bytecode ★★ ()
Ответ на: комментарий от sambist

решается написанием #! /usr/bin/python2 или #! /usr/bin/python3, и никакие ненатуверсиювыставленные симлинки не убьют. убьёт только отсутствие путона нужной версии как такового.

ещё может спасти чё-нить типа __future__. так что писать на петоне — дело хорошее.

f1u77y ★★★ ()

Вот индусы из ИБМ так же думали а мне потом на день головной боли.

ya-betmen ★★★★★ ()

Фанатикам этого не объяснишь, но кроме линукса и ГНУ существуют десятки других ОС, и сила шелл скриптов именно во всеобщей сквозной совместимости, которую bash разрушает, вводя свои ни с чем на свете не совместимые конструкции.

Deleted ()
Ответ на: комментарий от Deleted

существуют десятки других ОС

И на кой ляд там мои домашние скрипты?

najlus ★★★★★ ()

sh является симлинком на bash

В бубунте, к примеру, традиционно на dash.

pumbez ★★★ ()
Ответ на: комментарий от alex_the_v

На всех актуальных больших юниксах, а кроме линукса это - аикс, соляра и фрибсд, баш стоит.

Бред. У меня bash'а на FreeBSD нет.

iZEN ★★★★★ ()

Если ты про скриптинг на bash, то да, это плохо

смотреть на все, что больше 5 строчек на bash вырвиглазно

umren ★★★★★ ()
Ответ на: комментарий от sambist

Ил у пользователя вообщ пистона нет.

А у тебя мозга нет.

v9lij ★★★★★ ()
Ответ на: комментарий от Deleted

Фанатикам этого не объяснишь, но кроме линукса и ГНУ существуют десятки других ОС

Выкладывай хотя бы 5 примеров своих скриптов которые работают под 20 другими ОС и свободен

zolden ★★★★★ ()

Неоднократно слышал от людей что башизм это плохо и прочее бла-бла-бла про Bash, скажите пожалуйста, почему?

Потому что идиоты.
/thread

redgremlin ★★★★★ ()

Если ты для себя делаешь, то не пофиг ли на чужое мнение?

Eddy_Em ☆☆☆☆☆ ()

Учитывая, что на 100% GNU/Linux систем установлен Perl, в баше смысла сейчас не очень много.

svobodka_fighter ()

Как я понимаю, потому, что универсальней. Когда перейдешь на систему, где нет bash а, допустим sh, или другой *sh, чтобы не было мучительно больно.

Но я лично забиваю на это. Коль есть удобные возможности bash - почему бы не пользоваться. Просто помню, что, например, на моем рутере, возможно какие-то конструкции работать не будут.

Kroz ★★★★★ ()

Да, пиши POSIX-shell-совместимо, тебе всё равно делать нехрен =)

batekman ★★★ ()
Ответ на: комментарий от Lavos

Csh удобен вменяемыми дефолтами и умением работать с пользователем, скрипты на нем никто не пишет. Если бы этот ваш баш можно было заставить в хистори-серч без чтения тонны манов, никто бы сишел и не юзал.

anonymous ()

Забей на всё, пиши под zsh.

Deleted ()
Ответ на: комментарий от Deleted

Сможешь не залезая в ман рассказать отличия гнутого грепа от остальных?

PolarFox ★★★★★ ()
Ответ на: комментарий от Pinkbyte
$ python2
Python 2.7.9 (default, Dec 27 2014, 23:25:18) 
[GCC 4.8.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.version_info
sys.version_info(major=2, minor=7, micro=9, releaselevel='final', serial=0)
$ python3
Python 3.4.1 (default, Oct 11 2014, 00:34:32) 
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.version_info
sys.version_info(major=3, minor=4, micro=1, releaselevel='final', serial=0)
Black_Shadow ★★★★★ ()
Ответ на: комментарий от Black_Shadow

ЧТД, спасибо. А то развели там понимаешь ли панику...

Pinkbyte ★★★★★ ()
Ответ на: комментарий от anonymous

Ах ты ж блин, обсдался. И правда надо отдельно ставить. Ну и ладно.

alex_the_v ★★★ ()

Не все используют bash. В embedded железках например используется busybox ash, который умеет почти только чистый sh.

Dark_SavanT ★★★★★ ()
Ответ на: комментарий от buddhist

Извращение - это не писать на шелле тогда, когда для выполнения задачи требуются только test, grep, awk и sed, и менее 50 строк кода.

Одного моего знакомого, который работает в одной очень крупной международной компании, недавно начальник заставил переписывать десятистрочный shell-скрипт на C. Зачем - загадка. Извращение? Извращение.

kdask ()
Ответ на: комментарий от kdask

Извращение - это не писать на шелле тогда, когда для выполнения задачи требуются только test, grep, awk и sed, и менее 50 строк кода.

Да, соглашусь

buddhist ★★★★★ ()

Линукс == баш, какбэ очень давно. Все остальное нужно для других *NIX систем, и когда нужно будет переносить под них, башизмы будут не самым большим злом. Разные coreutils еще хуже.

iVS ★★★★★ ()

Порставь какой-нибудь типичный busybox и проверь, как в нём работает. И всё.

IMO, bash позволил писать в линуксах извращённые изощрённые SysV init скрипты. Если бы не bash, очумелые погромисты дистрибутивов были бы ограничены в сливании init-а в г...о, и systemd настал бы намного позже. На ash такие витиеватые макароны писать сложнее, и скрипты в целом получаются менее глючные и более читаемые.

Shadow ★★★★★ ()
Ответ на: комментарий от kdask

Извращение? Извращение.

«Мне не надо, чтобы чисто. Главное, чтобы ты задолбался.»

Radjah ★★★★★ ()
Ответ на: комментарий от anonymous

Csh удобен вменяемыми дефолтами и умением работать с пользователем, скрипты на нем никто не пишет.

Я пишу скрипты на csh чисто для себя, чтобы «завернуть» несколько строчек команд в одну.

iZEN ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.