LINUX.ORG.RU

Почему bash стал стандартом, а zsh нет?

 ,


1

2

Братья! :)

Еще в незапамятные времена я рьяно взялся изучать основы не с bash, а с zsh и был поражен ее возможностями. Я взахлеб «курил» документацию и man'ы этой оболочки и ... Тут мой наставник меня «обломал»: «Брось и учи bash! О zsh забудь! Она тебе не нужна.»

Годы прошли, а я всё думаю: почему bash стал стандартом, а zsh нет? Ведь у zsh бездна возможностей!

Кто-нибудь может рассказать о применении zsh на производственных компьютерах, на серверах, на каких-нибудь рабочих станциях? Или zsh удел одиночек и гиков?

Спасибо за беседу и ваши отзывы!

Ответ на: комментарий от si0

А теперь суть bash builtin для самых маленьких:

$ strace -f bash -c '[ -v BASH_VERSION ]' &> /tmp/test1
$ strace -f bash -c '/usr/bin/[ -v BASH_VERSION' &> /tmp/test2
$ grep -c execve /tmp/test*
/tmp/test1:1
/tmp/test2:3

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

Не эквивалентны. Одна скобка — это дословно вызов ф-ции test, тем самым: а) вызов подпроцесса;

4.2

[ это встроенная команда в bash, и вызова /bin/[ НЕ происходит, если ты конечно не упоротый настолько:

if /bin/[ 1 = 2 ]; then

необходимость экранировать переменные (иначе вместо одного параметра можно передать несколько);

4.2 см. рис 1

в) синтаксис ужасен, это и =, -a, -o вместо однотипных ==, &&, ||.

[ "$a" == "$b" ] && [ "$c" != "$d" ]

А арифметика в bash работает в ((двойных скобках)) с сишным синтаксисом.

Просто ты не понимаешь, что команда [ нужна больше для работы с именами файлов, например для выяснения того, что процесс-скрипт имеет право доступа на выполнение файла. Ну а ты наверное пытаешься её применить к арифметике, конец немного предсказуем.

emulek
()

потому что de facto а не «стандартом»

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

который почти всегда по умолчанию bash.

DASH.

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

совместимость с де-факто стандартом sh

Кстати, не удивлюсь, если Поттеринг начнет создавать новый bashD, чтобы поломать совместимость с «маргинальными» поделиями и снизить фрагментацию.

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

Отвечу обоим, deterenkelt.

Не эквивалентны. Одна скобка — это дословно вызов ф-ции test, тем самым: а) вызов подпроцесса;

4.2

man test с тобой не согласен:

NAME
       test - check file types and compare values

SYNOPSIS
       test EXPRESSION
       test

       [ EXPRESSION ]
       [ ]
       [ OPTION

необходимость экранировать переменные (иначе вместо одного параметра можно передать несколько);

4.2 см. рис 1

Что называется, почувствуй разницу:

vonavi@desktop ~ $ x="1 ="
vonavi@desktop ~ $ [[ $x == 0 ]]
vonavi@desktop ~ $ [ $x = 0 ]
bash: [: слишком много аргументов
vonavi@desktop ~ $ 

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

А вот и нет. Читай здесь:

Starting Bash with the --posix command-line option or executing ‘set -o posix’ while Bash is running will cause Bash to conform more closely to the POSIX standard by changing the behavior to match that specified by POSIX in areas where the Bash default differs.

Соглашусь, что

за то многие пишут в начале скрипта #!/bin/sh, а это даёт точно такой же эффект, когда в системе установлен bash.

только вот я ставлю #!/usr/bin/env bash.

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

а) вызов подпроцесса

Вот здесь у тебя ошибка: test и [ — встроенные функции bash.

$ type [
[ is a shell builtin
$ type test
test is a shell builtin
$

И читать надо не man test, а help test. С остальным, вроде, никто не спорит.

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

Вот здесь у тебя ошибка: test и [ — встроенные функции bash.

Вот и замечательно :)

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

дна скобка — это дословно вызов ф-ции test,
а) вызов подпроцесса;

Таладно?

~ $ LC_ALL=C $0 --version
GNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

~ $ LC_ALL=C type [
[ is a shell builtin

KennyMinigun ★★★★★
()

А я просто когда-то раньше осилил bash, теперь пересаживаться на zsh/fish неудобно/незачем. Но неоднократно пытался, полтора месяца бывало протянул.

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

let the mortal combat begin

на офсайте есть все: http://fishshell.com/

Давай ты будешь моим браузером по этому сайту.
zsh:
/e/s/n<Tab><Enter> - попадаем в /etc/sysconfig/network
fish:
<тут твоя ссылка на сайт с описанием как это реализовать на subj>

zsh:
ssh s<Tab> - получаем меню доступных хостов начинающихся с s, с возможностью выбора стрелками/Tab
fish:
<ты знаешь что делать>

zsh:
zargs - - (#i)*.log(.L+20) - - rm - удалить регистронезависимо все логи больше 20 байт, в директории порядка 100000 файлов

fish:

zolden ★★★★★
()
Последнее исправление: zolden (всего исправлений: 1)
Ответ на: комментарий от umren

Гнутый софт в простоту не может. Он может в отличную функциональность и переносимость, которых нет в BSD-говне, но не в простоту.

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

А вот и нет. Читай здесь

во первых читать нужно man pages в своей системе, man это часть программы, а программы иногда меняются. А иногда наоборот, заходишь на сервак, а там рухлядь какая-то, типа CentOS5, или что похуже.

Во вторых, ты не понял. Фишка в том, что если запустить bash под именем sh, то он становится полностью posix совместимым (вниз, в posix).

When invoked as sh, bash enters posix mode after the startup files are read.

Также это работает если в системе нет bash, но есть posix-sh.

В итоге, это позволяет запускать posix-скрипты в bash, также и bash скрипты(но там я пишу #!/bin/bash, и для себя, и для ОС)

только вот я ставлю #!/usr/bin/env bash.

и смысл?

emulek
()
Ответ на: let the mortal combat begin от zolden

zargs - - (#i)*.log(.L+20) - - rm - удалить регистронезависимо все логи больше 20 байт

findutils:

$ find -iname "*.log" -size +20c -delete

зачем нужна zsh, если для поиска файлов есть findutils?

emulek
()
Ответ на: let the mortal combat begin от zolden

ssh s<Tab> - получаем меню доступных хостов начинающихся с s, с возможностью выбора стрелками/Tab

кстати с башкомплит тоже работает, если ты конечно озаботился создать и заполнить ~/.ssh/config.

emulek
()
Ответ на: let the mortal combat begin от zolden

/e/s/n<Tab><Enter> - попадаем в /etc/sysconfig/network

а вот это не нужно.

У меня в слаке это лежит в /etc/rc.d/rc.inet1.conf, и там полно каталогов /etc/r* и файлов /etc/rc.d/rc.*

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

зачем нужна zsh, если для поиска файлов есть findutils?

мы сейчас про шеллы, можешь выше покурить обсуждение про [ и /usr/bin[
поэтому выйди из класса и зайди как положено

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

кстати с башкомплит тоже работает

меню? башкомплит в fish?
тред обещает быть томным

создать и заполнить ~/.ssh/config.

ssh это лишь пример, для ftp/ping/whatever тоже работает

zolden ★★★★★
()
Последнее исправление: zolden (всего исправлений: 1)
Ответ на: комментарий от emulek

У меня в слаке это лежит в /etc/rc.d/rc.inet1.conf, и там полно каталогов /etc/r* и файлов /etc/rc.d/rc.*

/e/r/r.i.c<Tab>

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

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

Небольшое уточнение

Во вторых, ты не понял. Фишка в том, что если запустить bash под именем sh, то он становится полностью posix совместимым (вниз, в posix).

Совместимость именно «вниз, в posix», а не полная. То есть скрипт с #!/bin/sh, корректно работающий в bash-e не всегда будет работать в dash или ksh

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

мы сейчас про шеллы

а минет твой шел делает? А почему «нет»?

можешь выше покурить обсуждение про [ и /usr/bin[ поэтому выйди из класса и зайди как положено

детка, если ты не заметил, то я в этом обсуждении тоже учавствовал.

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

кстати с башкомплит тоже работает

меню?

меню не нужно. А варианты bash показывает.

ssh это лишь пример, для ftp/ping/whatever тоже работает

мне не нужно ни то, ни другое, ни третье. А нужно только ssh. Оно работает.

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

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

да ну, я так наберу.

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

Совместимость именно «вниз, в posix», а не полная.

ну я и написал «полная совместимость вниз». Конечно башизмы работают в bash как в bash. Разве это не очевидно?

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

Док, ты старенький и пытаешься говорить о том чего не понимаешь.
(выше ты сам признаёшь что шеллом не пользуешься по сути, поэтому ты его толком и не знаешь)
Поэтому, отойди в сторону, это не твоя война.

zolden ★★★★★
()

Каких «производственных компьютерах»? Шелл каждый админ сам себе выбирает.

Zsh удел тех, кому он нравится.

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

выше ты сам признаёшь что шеллом не пользуешься по сути, поэтому ты его толком и не знаешь

у тебя галюны. Не ешь больше этих грибов. Хорошо?

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

и да,

ты наверное не понял: я не пользуюсь отвёрткой для забивания болтов. Это не говорит о том, что я не пользуюсь болтами и/или отвёрткой. С шеллом таже история, я им не пользуюсь например для поиска файлов.

Т.ч. отойди лучше ты, пионер ты наш…

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

при чём тут 70е? Ты просто дурачёк. Огленись вокруг себя: всякие твои телевизоры/роутеры/кофеварки работают под GNU/Linux, и внутри там неонка ash, которая вполне совместима с POSIX. А вот bash'а я там не встречал, как и zsh. Bash он только на дескопах/лаптопах/серверах(не на всех есть), и очень полезно, что он умеет и как POSIX работать. И кроме стандарта ещё и умеет свои башизмы, которых вполне хватает для написания любых скриптов(если не хватает, то это вообще задачане для шелла, а для другого ЯП).

а мы на Марс

не взлетит.

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

Огленись вокруг себя: всякие твои телевизоры/роутеры/кофеварки

А, специалист широкого профиля.
Написал тетрис на шелле в 1978м и теперь сиди, отдыхай - он и на кофеварке работать будет.
К вам вопросов больше нет, спасибо

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

большинство юзает nano

пруф или не было

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

Да, notepad++, если быть точнее.

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

Слово «полная» может ввести в заблуждение. В некоторых программах (например vim) совместимость сделана по другому. ИМХО, в данном случае правильней говорить об обратной совместимости. Это именно уточнение.

at ★★
()

потому что осилить надо сперва bash, а зш это как гуй для айпитейблс.

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

Я пробовал zsh, для меня он излишне сложен

У вас мозг рака

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

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

если вы не осилили баш

Кто про что, а лысый про расчёску...
Что значит осилить баш? Осилить до какого уровня?

Ну ок, раз ты считаешь себя не троллем, а борцом за справедливость, то к тебе же вопросы, что и к пассажиру с fish выше

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

до понимания простых вещей

Но что такое «простые вещи» в твоём понимании ты конечно не скажешь, ведь так?
Надо же сохранять налёт загадочности и недосказанности, чтобы сойти за хакира в своём классе

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

каком ещё классе, классе эникейщиков, что ли?

Но что такое «простые вещи» в твоём понимании ты конечно не скажешь, ведь так?

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

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

братюнь, я пользовался башем больше 10 лет, у меня был свой любимый бережнохранимый острозаточенный .bashrc, поэтому, соберись, твои простые вещи тут не котируются.
Найди в ветке 3 вопроса к фанату fish и попробуй ответить на них самому себе

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