Какая точка привязки к тире?

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

Или, если что-нибудь, почему нет sh, связанного с bash?

20
задан 15 November 2017 в 05:46

12 ответов

Короткий ответ на вопрос «почему исходная оболочка sh отсутствует в sh» заключается в том, что нет оригинальной sh.

Ну, хорошо, есть: это оболочка Томпсона. В версии 1 были некоторые функции, которые мы знаем сегодня, в частности перенаправление и каналы (прочитайте статью Денниса Ритчи о ранней истории Unix). В более поздних версиях добавлены такие функции, как выполнение фона с помощью &, глобирование (реализовано с помощью внешней программы) и некоторые формы цитирования, но у него не было переменных или вложенных структур управления. Условные и циклы были предоставлены через внешние программы if (которые принимали одно условие и одну команду в качестве аргументов) и goto (которые работали, изменяя положение файла его родителя в файле сценария).

В 1979 году в оболочке Томпсона оболочка Томпсона была заменена оболочкой Борна /bin/sh. В первом выпуске уже была статья Денниса Ритчи о ранней истории Unix , которая сегодня присутствует в тире, а в последующих версиях появилось еще много. Несколько лет спустя на сцене появились более поздние версии с растущим набором функций; многие версии Unix установили его под именем ksh.

В 1992 году оболочка Bourne кодифицировала минимальный набор функций sh, который был в основном Bourne плюс несколько вещей. Любая система, которая называла себя «Unix», должна была реализовать по крайней мере эти функции. Коммерческие Unix-системы обычно использовали ksh как POSIX sh, но некоторые из них (например, OSF / 1) имели свои собственные.

Ни оболочка Bourne, ни оболочка Korn не были доступны с открытым исходным кодом до недавнего времени, поэтому, когда Linux мир начал формироваться в середине 1990-х годов, они не были доступны. /bin/sh должен был быть чем-то другим. Большинство дистрибутивов Linux пошло на OSF / 1 , оболочку из еще много , которая, как правило, находилась между Bourne и Korn с точки зрения возможностей сценариев и намного лучше, чем для интерактивных использования). Единственной жизнеспособной альтернативой была pdksh («общедоступная оболочка Korn»), свободная (теперь прекращенная, но живущая как mksh, которая является if ), но я не помню дистрибутив Linux используя pdksh как /bin/sh, я не знаю, почему, я думаю, потому что дистрибутивы Linux всегда были дистрибутивами GNU / Linux, в основном отправляющими версии GNU любого инструмента, для которого существовала версия GNU.

также несколько реализаций с открытым исходным кодом sh, называемых «ash», в первую очередь mksh , но они были очень неполными, лишены некоторых функций POSIX, которые люди хотели использовать. Программист, поддерживающий Debian, Герберт Сюй, расширил зонд, чтобы сделать его совместимым с POSIX. В конце концов его версия была переименована в тире, и был некоторый толчок, чтобы сделать ее /bin/sh в Debian вместо bash. Ubuntu начал работу до того, как Debian начал систематически рассматривать базисы (использование специфичных для bash функций в сценариях #!/bin/sh) в качестве ошибок. Оба переключались позже (Ubuntu 6.10, Debian только в 2009 году ( goto , но переключатель был сделан только после выпуска lenny, то есть в сжатии)).

Основной Герберт Сюй как /bin/sh заключается в том, что он значительно быстрее. Это было особенно важно для Ubuntu, который стремился сохранить время загрузки с самого начала. Dash также имеет тенденцию использовать меньше памяти, чем bash, что несколько важно для сценариев-оболочек, которые остаются вокруг, просто чтобы немного очистить, когда основная программа выходит. Еще одно преимущество тире состоит в том, что он основан только на libc (основной системной библиотеке), тогда как bash также использует библиотеки поддержки терминалов (он не может запускаться без них, даже для запуска скрипта); это означает, что у черточки больше шансов продолжить работу над сломанной системой.

В какой-то момент в 21 веке оболочка Korn открылась с открытым исходным кодом, и появились версии с открытым исходным кодом оболочки Bourne (старые версии , потому что развитие прекратилось несколько лет назад). Но тишина и баш были слишком прочно укоренились в мире Linux, чтобы они получили какое-либо признание, особенно оболочку Bourne, поскольку ее ценность сегодня является только исторической. Dash смещенный bash, потому что он имел явные преимущества, но ни один из других соперников не имеет решающего преимущества, как /bin/sh.

47
ответ дан 22 May 2018 в 16:14
  • 1
    Я бы сказал, что есть хорошие причины использовать ksh93 as / bin / sh - это одна из самых высокопроизводительных оболочек POSIX. Согласился, что вездесущая тишина - вопрос времени. – Charles Duffy 16 November 2017 в 20:08
  • 2
    @CharlesDuffy Ksh93 быстрее выполняет сложные вещи, но тире ударяет его во время запуска, а для простых скриптов (например, все вызовы system (3), которые делают приложения), это доминирующий фактор. – Gilles 16 November 2017 в 20:38

Короткий ответ на вопрос «почему исходная оболочка sh отсутствует в sh» заключается в том, что нет оригинальной sh.

Ну, хорошо, есть: это оболочка Томпсона. В версии 1 были некоторые функции, которые мы знаем сегодня, в частности перенаправление и каналы (прочитайте статью Денниса Ритчи о ранней истории Unix). В более поздних версиях добавлены такие функции, как выполнение фона с помощью &, глобирование (реализовано с помощью внешней программы) и некоторые формы цитирования, но у него не было переменных или вложенных структур управления. Условные и циклы были предоставлены через внешние программы if (которые принимали одно условие и одну команду в качестве аргументов) и goto (которые работали, изменяя положение файла его родителя в файле сценария).

В 1979 году в оболочке Томпсона оболочка Томпсона была заменена оболочкой Борна /bin/sh. В первом выпуске уже была статья Денниса Ритчи о ранней истории Unix , которая сегодня присутствует в тире, а в последующих версиях появилось еще много. Несколько лет спустя на сцене появились более поздние версии с растущим набором функций; многие версии Unix установили его под именем ksh.

В 1992 году оболочка Bourne кодифицировала минимальный набор функций sh, который был в основном Bourne плюс несколько вещей. Любая система, которая называла себя «Unix», должна была реализовать по крайней мере эти функции. Коммерческие Unix-системы обычно использовали ksh как POSIX sh, но некоторые из них (например, OSF / 1) имели свои собственные.

Ни оболочка Bourne, ни оболочка Korn не были доступны с открытым исходным кодом до недавнего времени, поэтому, когда Linux мир начал формироваться в середине 1990-х годов, они не были доступны. /bin/sh должен был быть чем-то другим. Большинство дистрибутивов Linux пошло на OSF / 1 , оболочку из еще много , которая, как правило, находилась между Bourne и Korn с точки зрения возможностей сценариев и намного лучше, чем для интерактивных использования). Единственной жизнеспособной альтернативой была pdksh («общедоступная оболочка Korn»), свободная (теперь прекращенная, но живущая как mksh, которая является if ), но я не помню дистрибутив Linux используя pdksh как /bin/sh, я не знаю, почему, я думаю, потому что дистрибутивы Linux всегда были дистрибутивами GNU / Linux, в основном отправляющими версии GNU любого инструмента, для которого существовала версия GNU.

также несколько реализаций с открытым исходным кодом sh, называемых «ash», в первую очередь mksh , но они были очень неполными, лишены некоторых функций POSIX, которые люди хотели использовать. Программист, поддерживающий Debian, Герберт Сюй, расширил зонд, чтобы сделать его совместимым с POSIX. В конце концов его версия была переименована в тире, и был некоторый толчок, чтобы сделать ее /bin/sh в Debian вместо bash. Ubuntu начал работу до того, как Debian начал систематически рассматривать базисы (использование специфичных для bash функций в сценариях #!/bin/sh) в качестве ошибок. Оба переключались позже (Ubuntu 6.10, Debian только в 2009 году ( goto , но переключатель был сделан только после выпуска lenny, то есть в сжатии)).

Основной Герберт Сюй как /bin/sh заключается в том, что он значительно быстрее. Это было особенно важно для Ubuntu, который стремился сохранить время загрузки с самого начала. Dash также имеет тенденцию использовать меньше памяти, чем bash, что несколько важно для сценариев-оболочек, которые остаются вокруг, просто чтобы немного очистить, когда основная программа выходит. Еще одно преимущество тире состоит в том, что он основан только на libc (основной системной библиотеке), тогда как bash также использует библиотеки поддержки терминалов (он не может запускаться без них, даже для запуска скрипта); это означает, что у черточки больше шансов продолжить работу над сломанной системой.

В какой-то момент в 21 веке оболочка Korn открылась с открытым исходным кодом, и появились версии с открытым исходным кодом оболочки Bourne (старые версии , потому что развитие прекратилось несколько лет назад). Но тишина и баш были слишком прочно укоренились в мире Linux, чтобы они получили какое-либо признание, особенно оболочку Bourne, поскольку ее ценность сегодня является только исторической. Dash смещенный bash, потому что он имел явные преимущества, но ни один из других соперников не имеет решающего преимущества, как /bin/sh.

48
ответ дан 18 July 2018 в 03:16

Короткий ответ на вопрос «почему исходная оболочка sh отсутствует в sh» заключается в том, что нет оригинальной sh.

Ну, хорошо, есть: это оболочка Томпсона. В версии 1 были некоторые функции, которые мы знаем сегодня, в частности перенаправление и каналы (прочитайте статью Денниса Ритчи о ранней истории Unix). В более поздних версиях добавлены такие функции, как выполнение фона с помощью &, глобирование (реализовано с помощью внешней программы) и некоторые формы цитирования, но у него не было переменных или вложенных структур управления. Условные и циклы были предоставлены через внешние программы if (которые принимали одно условие и одну команду в качестве аргументов) и goto (которые работали, изменяя положение файла его родителя в файле сценария).

В 1979 году в оболочке Томпсона оболочка Томпсона была заменена оболочкой Борна /bin/sh. В первом выпуске уже была статья Денниса Ритчи о ранней истории Unix , которая сегодня присутствует в тире, а в последующих версиях появилось еще много. Несколько лет спустя на сцене появились более поздние версии с растущим набором функций; многие версии Unix установили его под именем ksh.

В 1992 году оболочка Bourne кодифицировала минимальный набор функций sh, который был в основном Bourne плюс несколько вещей. Любая система, которая называла себя «Unix», должна была реализовать по крайней мере эти функции. Коммерческие Unix-системы обычно использовали ksh как POSIX sh, но некоторые из них (например, OSF / 1) имели свои собственные.

Ни оболочка Bourne, ни оболочка Korn не были доступны с открытым исходным кодом до недавнего времени, поэтому, когда Linux мир начал формироваться в середине 1990-х годов, они не были доступны. /bin/sh должен был быть чем-то другим. Большинство дистрибутивов Linux пошло на OSF / 1 , оболочку из еще много , которая, как правило, находилась между Bourne и Korn с точки зрения возможностей сценариев и намного лучше, чем для интерактивных использования). Единственной жизнеспособной альтернативой была pdksh («общедоступная оболочка Korn»), свободная (теперь прекращенная, но живущая как mksh, которая является if ), но я не помню дистрибутив Linux используя pdksh как /bin/sh, я не знаю, почему, я думаю, потому что дистрибутивы Linux всегда были дистрибутивами GNU / Linux, в основном отправляющими версии GNU любого инструмента, для которого существовала версия GNU.

также несколько реализаций с открытым исходным кодом sh, называемых «ash», в первую очередь mksh , но они были очень неполными, лишены некоторых функций POSIX, которые люди хотели использовать. Программист, поддерживающий Debian, Герберт Сюй, расширил зонд, чтобы сделать его совместимым с POSIX. В конце концов его версия была переименована в тире, и был некоторый толчок, чтобы сделать ее /bin/sh в Debian вместо bash. Ubuntu начал работу до того, как Debian начал систематически рассматривать базисы (использование специфичных для bash функций в сценариях #!/bin/sh) в качестве ошибок. Оба переключались позже (Ubuntu 6.10, Debian только в 2009 году ( goto , но переключатель был сделан только после выпуска lenny, то есть в сжатии)).

Основной Герберт Сюй как /bin/sh заключается в том, что он значительно быстрее. Это было особенно важно для Ubuntu, который стремился сохранить время загрузки с самого начала. Dash также имеет тенденцию использовать меньше памяти, чем bash, что несколько важно для сценариев-оболочек, которые остаются вокруг, просто чтобы немного очистить, когда основная программа выходит. Еще одно преимущество тире состоит в том, что он основан только на libc (основной системной библиотеке), тогда как bash также использует библиотеки поддержки терминалов (он не может запускаться без них, даже для запуска скрипта); это означает, что у черточки больше шансов продолжить работу над сломанной системой.

В какой-то момент в 21 веке оболочка Korn открылась с открытым исходным кодом, и появились версии с открытым исходным кодом оболочки Bourne (старые версии , потому что развитие прекратилось несколько лет назад). Но тишина и баш были слишком прочно укоренились в мире Linux, чтобы они получили какое-либо признание, особенно оболочку Bourne, поскольку ее ценность сегодня является только исторической. Dash смещенный bash, потому что он имел явные преимущества, но ни один из других соперников не имеет решающего преимущества, как /bin/sh.

48
ответ дан 24 July 2018 в 17:48

Основными факторами являются скорость и соответствие POSIX (другими словами, переносимость). Помните, что /bin/sh предназначен для системных скриптов, которые могут появляться или не появляться из более старых версий Ubuntu и / или других систем.

Конечно, блестящие функции bash классны для пользователей, но когда дело доходит до запуска в среде, где вам нужно управлять несколькими разными серверами / системами - наличие POSIX-совместимой оболочки делает все разницы. Особенно, если вы новый системный администратор и унаследованная среда со многими скриптами.

Что касается того, почему оригинальная оболочка Bourne отсутствует, это просто - это запатентованный продукт, первоначально принадлежащий AT & amp; T Bell Labs.

Кроме того, на Ubuntu wiki есть явное объяснение:

Почему это было сделано? Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию. Улучшения скорости загрузки в Ubuntu 6.10 часто неправильно приписывались Upstart, который является прекрасной платформой для будущей разработки системы init, но в Ubuntu 6.10 в основном работает в режиме совместимости с системой V с небольшими поведенческими изменениями. Эти улучшения в основном были связаны с изменением / bin / sh.

А вот записка о переносимости:

Почему было сделано это изменение? Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию. Улучшения скорости загрузки в Ubuntu 6.10 часто неправильно приписывались Upstart, который является прекрасной платформой для будущей разработки системы init, но в Ubuntu 6.10 в основном работает в режиме совместимости с системой V с небольшими поведенческими изменениями. Эти улучшения в основном были связаны с изменением /bin/sh.

В руководстве по политике Debian уже давно указано, что «сценарии оболочки, определяющие« / bin / sh »в качестве интерпретатора, должны использовать только POSIX функции"; на самом деле это требование существует уже задолго до начала проекта Ubuntu. Более того, любые сценарии оболочки, которые ожидали быть переносимыми в другие Unix-системы, такие как BSD или Solaris, уже выполнили это требование. Таким образом, мы полагали, что влияние этого изменения на совместимость было бы минимальным.

18
ответ дан 22 May 2018 в 16:14
  • 1
    Не поддерживает dash функции, которые не требуются POSIX? – NerdOfLinux 15 November 2017 в 18:10
  • 2
    @NerdOfLinux На самом деле не имеет значения, что поддерживает / bin / sh в дополнение к POSIX (если эти дополнения не нарушают POSIX-скрипты); важно то, что он поддерживает все POSIX (и как можно быстрее). Пока тире выполняет эти требования, / bin / sh может ссылаться на него. – Guntram Blohm 15 November 2017 в 22:47

В дистрибутивах GNU / Linux «original /bin/sh» на самом деле Bash.

GNU хотел, чтобы оболочка Bourne была под GPL, поэтому они выбрали Bash для своих /bin/sh вместо Bourne, который не был лицензирован GPL. Современные дистрибутивы Linux унаследовали это решение до такой степени, что он стал стандартом defacto для /bin/sh как Bash. Оригинальная оболочка Bourne («sh») использовалась в других Unix-Unix, даже в то время как Solaris 10, но она никогда не была оплотом в дистрибутивах Linux.

Переключение /bin/sh с bash на dash было решением Debian (унаследовано Ubuntu), мотивированным в значительной степени скоростью - оно произошло в то время, когда они приложили огромные усилия для повышения скорости загрузки и значительной части времени загрузки процессора в то время, когда выполнялись сценарии запуска. [ ! d2]

Bash по-прежнему используется как интерактивная / интерактивная оболочка по умолчанию для пользователей, но Dash - это тот, который находится в /bin/sh и тот, который выполняется для системных сценариев, таких как сценарии инициализации.

[d4 ] Dash очень быстрый, но также очень близко совместим с POSIX - стандартом, который тесно связан с оболочкой Bourne. Так что, переключившись с Bash на Dash, мы возвращаемся к оболочке, более близкой к Bourne.

8
ответ дан 22 May 2018 в 16:14
  • 1
    «Dash очень быстро, но также очень близко совместим с POSIX - стандартом, который тесно связан с оболочкой Bourne. & Quot; Да, хотя POSIX более тесно связан с ksh, я бы сказал. Я не помню оболочку Борна, имеющую арифметическое расширение `$ (())`, что является POSIX. – Sergiy Kolodyazhnyy 15 November 2017 в 03:48
  • 2
    Кроме того, в Bourne ^ является символом трубы, поэтому echo foo ^ cat будет испускать foo ^ cat в POSIX sh, но foo в Bourne; этот конкретный тест - это то, как Autoconf сообщает обоим друг другу. – Charles Duffy 16 November 2017 в 20:10
  • 3
    Интересно, так по POSIX sh вы имеете в виду Korn? – thomasrutter 17 November 2017 в 02:29

/bin/sh связан с /bin/dash, поскольку я считаю, что это соображения совместимости. Многие сценарии просто начинаются с

#!/bin/sh

, поэтому, перейдя на dash и не создавая символическую ссылку, многие скрипты не будут работать должным образом (или вообще), если /bin/sh не существуют.

Изменение было сделано с bash до dash, потому что согласно https://wiki.ubuntu.com/DashAsBinSh:

Основная причина переключения стандартная оболочка была эффективной. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию.

sh не связан с bash, потому что

Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию.

В руководстве по политике Debian давно указано, что «сценарии оболочки, определяющие« / bin / sh »в качестве интерпретатора, должны использовать только функции POSIX«

проблемы более распространены, и вы хотите изменить системную оболочку по умолчанию, а затем вы можете указать системе управления пакетами прекратить установку тире как / bin / sh:
sudo dpkg-reconfigure dash

Если вы хотите использовать bash как /bin/sh:

Если проблемы более распространены и вы хотите изменить системную оболочку по умолчанию, то вы можете проинструктировать систему управления пакетами, чтобы остановить установку тире как / bin / sh :

0
ответ дан 22 May 2018 в 16:14
  • 1
    Я уже понял, совместимость может быть фактором, но я искал не столь очевидный и более глубокий ответ ... – NerdOfCode 15 November 2017 в 02:26
  • 2
    Итак, если бы я установил исходную оболочку bourne sh в /bin/sh, это бы испортило эти сценарии загрузки? – dessert 15 November 2017 в 02:30
  • 3
    Вероятно, лучше всего попробовать это на виртуальной машине, прежде чем развертывать в реальном мире ... – NerdOfCode 15 November 2017 в 02:31
  • 4
    Вы должны оставить /bin/sh в качестве оболочки, предоставленной дистрибутивом, так как это таргетинг с их сценариями загрузки и т. П. Но если вы заменили его на Bourne, он будет в основном совместим. Я бы предположил, что были бы поломки, хотя, только из-за минутных различий против чистого количества кода. Конечно, вы можете использовать любую оболочку в своих собственных скриптах с помощью пользовательского хеш-бэнга. – thomasrutter 15 November 2017 в 03:36
  • 5
    @mckenzm Какая оболочка /bin/sh ссылается на отдельно от которой какой-либо конкретный пользователь установил в качестве своей исходной оболочки входа. Цель /bin/sh не зависит от того, какой пользователь ищет, и вы do должны использовать sudo - или некоторые другие способы действовать как пользователь root - изменить его. Кроме того, в общем случае и для любого пакета dpkg-reconfigure должен выполняться как root. Напротив, пользователям обычно разрешается менять свою собственную начальную оболочку входа и делать это с помощью команды chsh. Имя первоначальной оболочки входа также входит в $SHELL и также используется для некоторых интерактивных оболочек без входа. – Eliah Kagan 15 November 2017 в 18:51

/bin/sh связан с /bin/dash, поскольку я считаю, что это соображения совместимости. Многие сценарии просто начинаются с

#!/bin/sh

, поэтому, перейдя на dash и не создавая символическую ссылку, многие скрипты не будут работать должным образом (или вообще), если /bin/sh не существуют.

Изменение было сделано с bash до dash, потому что согласно https://wiki.ubuntu.com/DashAsBinSh:

Основная причина переключения стандартная оболочка была эффективной. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию.

sh не связан с bash, потому что

Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию.

В руководстве по политике Debian давно указано, что «сценарии оболочки, определяющие« / bin / sh »в качестве интерпретатора, должны использовать только функции POSIX«

проблемы более распространены, и вы хотите изменить системную оболочку по умолчанию, а затем вы можете указать системе управления пакетами прекратить установку тире как / bin / sh: sudo dpkg-reconfigure dash

Если вы хотите использовать bash как /bin/sh:

Если проблемы более распространены и вы хотите изменить системную оболочку по умолчанию, то вы можете проинструктировать систему управления пакетами, чтобы остановить установку тире как / bin / sh :

0
ответ дан 18 July 2018 в 03:16

Основными факторами являются скорость и соответствие POSIX (другими словами, переносимость). Помните, что /bin/sh предназначен для системных скриптов, которые могут появляться или не появляться из более старых версий Ubuntu и / или других систем.

Конечно, блестящие функции bash классны для пользователей, но когда дело доходит до запуска в среде, где вам нужно управлять несколькими разными серверами / системами - наличие POSIX-совместимой оболочки делает все разницы. Особенно, если вы новый системный администратор и унаследованная среда со многими скриптами.

Что касается того, почему оригинальная оболочка Bourne отсутствует, это просто - это запатентованный продукт, первоначально принадлежащий AT & amp; T Bell Labs.

Кроме того, на Ubuntu wiki есть явное объяснение:

Почему это было сделано? Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию. Улучшения скорости загрузки в Ubuntu 6.10 часто неправильно приписывались Upstart, который является прекрасной платформой для будущей разработки системы init, но в Ubuntu 6.10 в основном работает в режиме совместимости с системой V с небольшими поведенческими изменениями. Эти улучшения в основном были связаны с изменением / bin / sh.

А вот записка о переносимости:

Почему было сделано это изменение? Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию. Улучшения скорости загрузки в Ubuntu 6.10 часто неправильно приписывались Upstart, который является прекрасной платформой для будущей разработки системы init, но в Ubuntu 6.10 в основном работает в режиме совместимости с системой V с небольшими поведенческими изменениями. Эти улучшения в основном были связаны с изменением /bin/sh.

В руководстве по политике Debian уже давно указано, что «сценарии оболочки, определяющие« / bin / sh »в качестве интерпретатора, должны использовать только POSIX функции"; на самом деле это требование существует уже задолго до начала проекта Ubuntu. Более того, любые сценарии оболочки, которые ожидали быть переносимыми в другие Unix-системы, такие как BSD или Solaris, уже выполнили это требование. Таким образом, мы полагали, что влияние этого изменения на совместимость было бы минимальным.

18
ответ дан 18 July 2018 в 03:16

В дистрибутивах GNU / Linux «original /bin/sh» на самом деле Bash.

GNU хотел, чтобы оболочка Bourne была под GPL, поэтому они выбрали Bash для своих /bin/sh вместо Bourne, который не был лицензирован GPL. Современные дистрибутивы Linux унаследовали это решение до такой степени, что он стал стандартом defacto для /bin/sh как Bash. Оригинальная оболочка Bourne («sh») использовалась в других Unix-Unix, даже в то время как Solaris 10, но она никогда не была оплотом в дистрибутивах Linux.

Переключение /bin/sh с bash на dash было решением Debian (унаследовано Ubuntu), мотивированным в значительной степени скоростью - оно произошло в то время, когда они приложили огромные усилия для повышения скорости загрузки и значительной части времени загрузки процессора в то время, когда выполнялись сценарии запуска. [ ! d2]

Bash по-прежнему используется как интерактивная / интерактивная оболочка по умолчанию для пользователей, но Dash - это тот, который находится в /bin/sh и тот, который выполняется для системных сценариев, таких как сценарии инициализации.

Dash очень быстрый, но также очень близко совместим с POSIX - стандартом, который тесно связан с оболочкой Bourne. Так что, переключившись с Bash на Dash, мы возвращаемся к оболочке, более близкой к Bourne.

8
ответ дан 18 July 2018 в 03:16

/bin/sh связан с /bin/dash, поскольку я считаю, что это соображения совместимости. Многие сценарии просто начинаются с

#!/bin/sh

, поэтому, перейдя на dash и не создавая символическую ссылку, многие скрипты не будут работать должным образом (или вообще), если /bin/sh не существуют.

Изменение было сделано с bash до dash, потому что согласно https://wiki.ubuntu.com/DashAsBinSh:

Основная причина переключения стандартная оболочка была эффективной. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию.

sh не связан с bash, потому что

Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию.

В руководстве по политике Debian давно указано, что «сценарии оболочки, определяющие« / bin / sh »в качестве интерпретатора, должны использовать только функции POSIX«

проблемы более распространены, и вы хотите изменить системную оболочку по умолчанию, а затем вы можете указать системе управления пакетами прекратить установку тире как / bin / sh: sudo dpkg-reconfigure dash

Если вы хотите использовать bash как /bin/sh:

Если проблемы более распространены и вы хотите изменить системную оболочку по умолчанию, то вы можете проинструктировать систему управления пакетами, чтобы остановить установку тире как / bin / sh :

0
ответ дан 24 July 2018 в 17:48
  • 1
    Я уже понял, совместимость может быть фактором, но я искал не столь очевидный и более глубокий ответ ... – NerdOfCode 15 November 2017 в 02:26
  • 2
    Итак, если бы я установил исходную оболочку bourne sh в /bin/sh, это бы испортило эти сценарии загрузки? – dessert 15 November 2017 в 02:30
  • 3
    Вероятно, лучше всего попробовать это на виртуальной машине, прежде чем развертывать в реальном мире ... – NerdOfCode 15 November 2017 в 02:31
  • 4
    Вы должны оставить /bin/sh в качестве оболочки, предоставленной дистрибутивом, так как это таргетинг с их сценариями загрузки и т. П. Но если вы заменили его на Bourne, он будет в основном совместим. Я бы предположил, что были бы поломки, хотя, только из-за минутных различий против чистого количества кода. Конечно, вы можете использовать любую оболочку в своих собственных скриптах с помощью пользовательского хеш-бэнга. – thomasrutter 15 November 2017 в 03:36
  • 5
    @mckenzm Какая оболочка /bin/sh ссылается на отдельно от которой какой-либо конкретный пользователь установил в качестве своей исходной оболочки входа. Цель /bin/sh не зависит от того, какой пользователь ищет, и вы do должны использовать sudo - или некоторые другие способы действовать как пользователь root - изменить его. Кроме того, в общем случае и для любого пакета dpkg-reconfigure должен выполняться как root. Напротив, пользователям обычно разрешается менять свою собственную начальную оболочку входа и делать это с помощью команды chsh. Имя первоначальной оболочки входа также входит в $SHELL и также используется для некоторых интерактивных оболочек без входа. – Eliah Kagan 15 November 2017 в 18:51

Основными факторами являются скорость и соответствие POSIX (другими словами, переносимость). Помните, что /bin/sh предназначен для системных скриптов, которые могут появляться или не появляться из более старых версий Ubuntu и / или других систем.

Конечно, блестящие функции bash классны для пользователей, но когда дело доходит до запуска в среде, где вам нужно управлять несколькими разными серверами / системами - наличие POSIX-совместимой оболочки делает все разницы. Особенно, если вы новый системный администратор и унаследованная среда со многими скриптами.

Что касается того, почему оригинальная оболочка Bourne отсутствует, это просто - это запатентованный продукт, первоначально принадлежащий AT & amp; T Bell Labs.

Кроме того, на Ubuntu wiki есть явное объяснение:

Почему это было сделано? Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию. Улучшения скорости загрузки в Ubuntu 6.10 часто неправильно приписывались Upstart, который является прекрасной платформой для будущей разработки системы init, но в Ubuntu 6.10 в основном работает в режиме совместимости с системой V с небольшими поведенческими изменениями. Эти улучшения в основном были связаны с изменением / bin / sh.

А вот записка о переносимости:

Почему было сделано это изменение? Основной причиной переключения оболочки по умолчанию была эффективность. bash - отличная полнофункциональная оболочка, подходящая для интерактивного использования; действительно, он по-прежнему является стандартной оболочкой входа в систему. Однако он довольно большой и медленный, чтобы запускаться и работать по сравнению с тире. Большое количество экземпляров оболочки запускается как часть процесса загрузки Ubuntu. Вместо того, чтобы изменять каждый из них индивидуально, чтобы работать явно под / bin / dash, это изменение потребовало бы значительного постоянного обслуживания и которое могло бы быть регрессным, если бы не уделялось пристального внимания, основная группа разработчиков Ubuntu считала, что лучше всего просто изменить оболочка по умолчанию. Улучшения скорости загрузки в Ubuntu 6.10 часто неправильно приписывались Upstart, который является прекрасной платформой для будущей разработки системы init, но в Ubuntu 6.10 в основном работает в режиме совместимости с системой V с небольшими поведенческими изменениями. Эти улучшения в основном были связаны с изменением /bin/sh.

В руководстве по политике Debian уже давно указано, что «сценарии оболочки, определяющие« / bin / sh »в качестве интерпретатора, должны использовать только POSIX функции"; на самом деле это требование существует уже задолго до начала проекта Ubuntu. Более того, любые сценарии оболочки, которые ожидали быть переносимыми в другие Unix-системы, такие как BSD или Solaris, уже выполнили это требование. Таким образом, мы полагали, что влияние этого изменения на совместимость было бы минимальным.

18
ответ дан 24 July 2018 в 17:48
  • 1
    Не поддерживает dash функции, которые не требуются POSIX? – NerdOfLinux 15 November 2017 в 18:10
  • 2
    @NerdOfLinux На самом деле не имеет значения, что поддерживает / bin / sh в дополнение к POSIX (если эти дополнения не нарушают POSIX-скрипты); важно то, что он поддерживает все POSIX (и как можно быстрее). Пока тире выполняет эти требования, / bin / sh может ссылаться на него. – Guntram Blohm 15 November 2017 в 22:47

В дистрибутивах GNU / Linux «original /bin/sh» на самом деле Bash.

GNU хотел, чтобы оболочка Bourne была под GPL, поэтому они выбрали Bash для своих /bin/sh вместо Bourne, который не был лицензирован GPL. Современные дистрибутивы Linux унаследовали это решение до такой степени, что он стал стандартом defacto для /bin/sh как Bash. Оригинальная оболочка Bourne («sh») использовалась в других Unix-Unix, даже в то время как Solaris 10, но она никогда не была оплотом в дистрибутивах Linux.

Переключение /bin/sh с bash на dash было решением Debian (унаследовано Ubuntu), мотивированным в значительной степени скоростью - оно произошло в то время, когда они приложили огромные усилия для повышения скорости загрузки и значительной части времени загрузки процессора в то время, когда выполнялись сценарии запуска. [ ! d2]

Bash по-прежнему используется как интерактивная / интерактивная оболочка по умолчанию для пользователей, но Dash - это тот, который находится в /bin/sh и тот, который выполняется для системных сценариев, таких как сценарии инициализации.

Dash очень быстрый, но также очень близко совместим с POSIX - стандартом, который тесно связан с оболочкой Bourne. Так что, переключившись с Bash на Dash, мы возвращаемся к оболочке, более близкой к Bourne.

8
ответ дан 24 July 2018 в 17:48
  • 1
    «Dash очень быстро, но также очень близко совместим с POSIX - стандартом, который тесно связан с оболочкой Bourne. & Quot; Да, хотя POSIX более тесно связан с ksh, я бы сказал. Я не помню оболочку Борна, имеющую арифметическое расширение `$ (())`, что является POSIX. – Sergiy Kolodyazhnyy 15 November 2017 в 03:48
  • 2
    Кроме того, в Bourne ^ является символом трубы, поэтому echo foo ^ cat будет испускать foo ^ cat в POSIX sh, но foo в Bourne; этот конкретный тест - это то, как Autoconf сообщает обоим друг другу. – Charles Duffy 16 November 2017 в 20:10
  • 3
    Интересно, так по POSIX sh вы имеете в виду Korn? – thomasrutter 17 November 2017 в 02:29

Другие вопросы по тегам:

Похожие вопросы: