LINUX.ORG.RU

Вышел Fish Shell 3.0

 , , , ,


1

1

Fish — современная командная оболочка, разработанная с целью удобства, простоты использования и продуктивности.

Основные изменения в релизе 3.0:

Новые возможности:

  • Теперь Fish поддерживает && (синоним and), || (синоним or) и ! (синоним not) для упрощения работы со скриптами написанными под другие шеллы
  • Переменные теперь можно использовать в качестве команд
  • Fish может быть запущен в private mode (fish --private), в этом режиме не сохраняется история команд
  • Имя машины теперь доступно в качестве зарезервированной переменной $hostname
  • $fish_pid и $last_pid переменные добавлены вместо %self и %last
  • exec спрашивает подтверждение если есть запущенные фоновые процессы
  • Добавлено множество новых опций в команды alias, bind, read, set, string
  • Пайп (|) в конце строки теперь корректно позволяет продолжить команду на следующей строке
  • Добавлены автодополнения параметров для множества программ

Несовместимые изменения:

  • Убран специальный % синтаксис для процессов на глобальном уровне. Теперь он работает только с командами которым требуется PID (kill, bg, fg и так далее)
  • Переработаны области видимости переменных объявленных в управляющих конструкциях (for, if, while, set и тд)
  • cd больше не разименовывает симлинки сам, теперь используется внутренний виртуальнй путь, как и в большинстве других оболочек
  • Различные изменения синтаксиса затронули в том числе множественное присвоение и получения среза массива
  • Теперь перенаправление stderr осуществляется через 2> вместо ^
  • Убрано использование ? для выражений подстановки

>>> Полное описание релиза

★★★★★

Проверено: jollheef ()

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

Я не вижу хдесь ни единой логической ошибки!

никто не говорил, что они здесь есть.

При Гитлере в Германии построили сеть лучших дорог в мире - автобанов. Ergo, Гитлер - герой. Всё нормально же.

mos ★★★★★ ()

Прикиньте, если бы все авторы zsh, fish и прочих dash просто довели до ума bash (архитектурные вещи) и приколхозили к нему свои любимые свистелки. А лучше не свистелки а инструменты типа отладки там или тестирования. Всё таки язык интерпретатора в первую очередь должен хорошо поддерживать написание скриптов, а во вторую интерактивную работу с однострочниками. Да и на работу с последними влияют вещи с шеллом жестко не связанные - типа readline, и вообще эмулятор терминала.

Но нет. Это же не вызовет такого восторга у фанбоев.

mos ★★★★★ ()

Отлично, а теперь немного сухих цифр

Самое популярное гнутое bloatware, ехал shellshock через shellshock:

$ cloc bash
    1183 text files.
    1152 unique files.
     691 files ignored.

github.com/AlDanial/cloc v 1.80  T=3.12 s (167.4 files/s, 153021.3 lines/s)
---------------------------------------------------------------------------------------
Language                             files          blank        comment           code
---------------------------------------------------------------------------------------
PO File                                 37          24924          34030         157776
C                                      252          20203          19574         103528
HTML                                     3           3773             38          26019
Bourne Shell                            36           3341           3461          19894
Windows Module Definition               44           2573             11          14766
C/C++ Header                           111           2729           3448           7345
TeX                                      1            821           3462           6762
yacc                                     2            803            907           5214
m4                                       4            466            509           4588
Perl                                     2            535            834           4229
Bourne Again Shell                      23            187            248            746
make                                     3             48             36            110
Assembly                                 2             11             20             48
awk                                      1              8             15             24
sed                                      2              0              0             16
---------------------------------------------------------------------------------------
SUM:                                   523          60422          66593         351065
---------------------------------------------------------------------------------------
$ cloc readline/
     148 text files.
     141 unique files.
      53 files ignored.

github.com/AlDanial/cloc v 1.80  T=0.64 s (159.3 files/s, 145347.8 lines/s)
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
C                                55           4793           4997          24313
Bourne Shell                     11           2092           2730          15796
HTML                              3           1400            126          11402
TeX                               1            821           3462           6762
Perl                              1            516            806           4106
m4                                2            352            409           3736
C/C++ Header                     28            859           1179           2302
Bourne Again Shell                1             26             39             64
--------------------------------------------------------------------------------
SUM:                            102          10859          13748          68481
--------------------------------------------------------------------------------

Пропаганда гомосексуализма:

$ cloc fish-shell/
    1533 text files.
    1522 unique files.
     421 files ignored.

github.com/AlDanial/cloc v 1.80  T=4.53 s (260.3 files/s, 192754.7 lines/s)
-----------------------------------------------------------------------------------
Language                         files          blank        comment           code
-----------------------------------------------------------------------------------
PO File                              9         125363         158672         301223
C                                   52          11775          10175          71618
C++                                 84           6467           7104          39034
Fish Shell                         841           4672           5447          34265
Bourne Shell                        33           4758           5640          30652
m4                                  12           1393            255          11613
C/C++ Header                        97           2940           4682           8766
JavaScript                           6           1689           7545           7511
Python                               3            457            486           2346
CMake                               13            287            417           1252
Markdown                             6            459              0           1221
CSS                                  2             87             31            736
make                                 2            111             88            623
Perl                                 4             86             71            371
HTML                                10             30              8            291
Windows Resource File                1             22              0            251
YAML                                 1              3              4             87
Objective C                          1             19             15             66
XML                                  1              0              0             18
Dockerfile                           1              5              3             11
-----------------------------------------------------------------------------------
SUM:                              1179         160623         200643         511955
-----------------------------------------------------------------------------------

А вот это настоящий рабочий инструмент для людей, которым нужен интерфейс к сервисам ядра Unix:

$ cloc mksh/                                                                   
      32 text files.                                                           
      32 unique files.                                                         
       7 files ignored.                                                        
                                                                               
github.com/AlDanial/cloc v 1.80  T=0.18 s (147.9 files/s, 220839.0 lines/s)    
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                               18           2779           4512          23839
C/C++ Header                     5            254            512           2577
Bourne Shell                     1            124            414           2252
Perl                             1            109            182           1072
make                             1             26             20            163
-------------------------------------------------------------------------------
SUM:                            26           3292           5640          29903
-------------------------------------------------------------------------------

Выбирайте инструменты мудро!

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

Прикиньте, если бы все авторы zsh, fish и прочих dash просто довели до ума bash

Три раза ха, "довели до ума", bash+readline это, на минуточку, GNU GPL и, емнип, бумажный договор с FSF, а теперь посмотри какие лицензии выбрали авторы zsh и dash (это кстати, пожалуй, единственное что их могло объединить в одном предложении).

d_a ★★★★★ ()
Ответ на: Отлично, а теперь немного сухих цифр от d_a

Считать нужно сорцы, а не всё подряд.

~> tokei src
------------------------------------------------------------------------------------------
 Language                       Files        Lines         Code     Comments       Blanks
------------------------------------------------------------------------------------------
 C                                  1          574          439           48           87
 C Header                          87         9729         5208         2739         1782
 C++                               84        52586        39583         6539         6464
------------------------------------------------------------------------------------------
 Total                            172        62889        45230         9326         8333
------------------------------------------------------------------------------------------

Ещё забавно, что он написан на «C с классами». Давно такого не видел.

RazrFalcon ★★★★★ ()
Последнее исправление: RazrFalcon (всего исправлений: 1)
Ответ на: Отлично, а теперь немного сухих цифр от d_a

Re: Отлично, а теперь немного сухих цифр

А вот это настоящий рабочий инструмент для людей, которым нужен интерфейс к сервисам ядра Unix:

$ cloc mksh/                                                                   
      32 text files.                                                           
      32 unique files.                                                         
       7 files ignored.                                                        
                                                                               
github.com/AlDanial/cloc v 1.80  T=0.18 s (147.9 files/s, 220839.0 lines/s)    
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
C                               18           2779           4512          23839

Настоящий инструмент для людей, которым нужен интерфейс к сервисам ядра Unix — это вот так:

 % cloc /usr/src/bin/sh      
     592 text files.
     581 unique files.                                          
     522 files ignored.

github.com/AlDanial/cloc v 1.80  T=0.63 s (111.6 files/s, 29562.4 lines/s)
---------------------------------------------------------------------------------------
Language                             files          blank        comment           code
---------------------------------------------------------------------------------------
C                                       26           1563           2233          11744
make                                    10             61             16            577
C/C++ Header                            24            139            916            560
Bourne Shell                             9             48            313            284
Windows Module Definition                1              3              0             93
---------------------------------------------------------------------------------------
SUM:                                    70           1814           3478          13258
---------------------------------------------------------------------------------------
anonymous ()

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

Джванадцать лет ждал!

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

Считать нужно сорцы, а не всё подряд.

Эээ, постой, а как же килер-фича с настройкой через браузер? Так что нет-нет-нет, считать надо с JS и петунгом и прочей педерастией.

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

Нет. Чтобы то, что команда выдала в stdout, направить в stderr.
То есть то, что в Bourne Shell делает конструкция «>&2».

dosomeshit || {
    echo "${0##*/}: shit happens: $?" >&2
    exit 1
}
И заметь, stderr — лишь частный случай. Вместо 2 может быть любой другой файловый дескриптор.

argv_0_ ()
Ответ на: Отлично, а теперь немного сухих цифр от d_a

Re: Отлично, а теперь немного сухих цифр

А вот это настоящий рабочий инструмент для людей, которым нужен интерфейс к сервисам ядра Unix
mksh

mksh очень хорош, подтверждаю. Ещё, как вариант, есть ksh из OpenBSD. Его линуксовый порт зовётся loksh.

А для скриптов, конечно, только POSIX-совместимый sh.

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

В современных дистрах линукса sh является симлинком к bash или другим шеллам же.

Даже когда sh является симлинком к bash, это не означает, что поведение sh и bash одинаковое. Вот выдержка из bash(1):

If bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible, while conforming to the POSIX standard as well.

Ну и лучше, конечно, (особенно после всяких shellshock'ов) чтобы sh не был линком на раздутый bash.

anonymous ()
Ответ на: комментарий от xDShot
 tokei /usr/src/bin/sh/
-----------------------------------------------------------------------------------------
 Language                      Files        Lines         Code     Comments       Blanks
-----------------------------------------------------------------------------------------
 C                                26        15540        11909         2068         1563
 C Header                         24         1615          560          916          139
 Makefile                         10          654          577           16           61
 Module-Definition                 1           96           93            0            3
 Shell                             9          645          279          318           48
-----------------------------------------------------------------------------------------
 Total                            70        18550        13418         3318         1814
ESCRIPTION
     The sh utility is the standard command interpreter for the system.  The
     current version of sh is close to the IEEE Std 1003.1 (“POSIX.1”)
     specification for the shell.  It only supports features designated by
     POSIX, plus a few Berkeley extensions. 

В 10 раз меньше кода - в 10 раз меньше потенциальных багов.
Но да, в Откровениях Рыжего сказано, что юниксвей уже не труЪ, поэтому лучше запилить жирный, медленный суперкомбайн:

% time sh -c 'for i in $(seq 1 1000); do sh -c ":"; done' 
sh -c 'for i in $(seq 1 1000); do sh -c ":"; done'  0,69s user 0,64s system 98% cpu 1,345 total

% time bash -c 'for i in $(seq 1 1000); do bash -c ":"; done'
bash -c 'for i in $(seq 1 1000); do bash -c ":"; done'  0,96s user 1,33s system 100% cpu 2,272 total
% time zsh -c 'for i in $(seq 1 1000); do zsh -c ":"; done' 
zsh -c 'for i in $(seq 1 1000); do zsh -c ":"; done'  1,54s user 2,45s system 119% cpu 3,347 total
и потом гордо заявлять «ноташелшок!»

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

Ну и лучше, конечно, (особенно после всяких shellshock'ов) чтобы sh не был линком на раздутый bash.

А на что тогда?

Да хотя бы на тот же dash. Собственно, во многих дистрибутивах линукса sh по умолчанию как раз является симлинком именно на dash, а не на bash.

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

что юниксвей уже не труЪ

Да GNU/Linux-то с самого рождения был так себе юниксвей, чего уж тут.

По этому поводу есть такая, не лишённая смысла, цитата:

BSD is what you get when a bunch of Unix hackers sit down to try to port a Unix system to the PC.

Linux is what you get when a bunch of PC hackers sit down and try to write a Unix system for the PC.

anonymous ()