Какую оболочку Linux я должен использовать? [закрытый]

Когда вы объявляете ссылочную переменную (т. е. объект), вы действительно создаете указатель на объект. Рассмотрим следующий код, в котором вы объявляете переменную примитивного типа int:

int x;
x = 10;

В этом примере переменная x является int, и Java инициализирует ее для 0. Когда вы назначаете его 10 во второй строке, ваше значение 10 записывается в ячейку памяти, на которую указывает x.

Но когда вы пытаетесь объявить ссылочный тип, произойдет что-то другое. Возьмите следующий код:

Integer num;
num = new Integer(10);

Первая строка объявляет переменную с именем num, но она не содержит примитивного значения. Вместо этого он содержит указатель (потому что тип Integer является ссылочным типом). Поскольку вы еще не указали, что указать на Java, он устанавливает значение null, что означает «Я ничего не указываю».

Во второй строке ключевое слово new используется для создания экземпляра (или создания ) объекту типа Integer и переменной указателя num присваивается этот объект. Теперь вы можете ссылаться на объект, используя оператор разыменования . (точка).

Exception, о котором вы просили, возникает, когда вы объявляете переменную, но не создавали объект. Если вы попытаетесь разыменовать num. Перед созданием объекта вы получите NullPointerException. В самых тривиальных случаях компилятор поймает проблему и сообщит вам, что «num не может быть инициализирован», но иногда вы пишете код, который непосредственно не создает объект.

Например, вы можете имеют следующий метод:

public void doSomething(SomeObject obj) {
   //do something to obj
}

В этом случае вы не создаете объект obj, скорее предполагая, что он был создан до вызова метода doSomething. К сожалению, этот метод можно вызвать следующим образом:

doSomething(null);

В этом случае obj имеет значение null. Если метод предназначен для того, чтобы что-то сделать для переданного объекта, целесообразно бросить NullPointerException, потому что это ошибка программиста, и программисту понадобится эта информация для целей отладки.

Альтернативно, там могут быть случаи, когда цель метода заключается не только в том, чтобы работать с переданным в объекте, и поэтому нулевой параметр может быть приемлемым. В этом случае вам нужно будет проверить нулевой параметр и вести себя по-другому. Вы также должны объяснить это в документации. Например, doSomething может быть записано как:

/**
  * @param obj An optional foo for ____. May be null, in which case 
  *  the result will be ____.
  */
public void doSomething(SomeObject obj) {
    if(obj != null) {
       //do something
    } else {
       //do something else
    }
}

Наконец, Как определить исключение & amp; причина использования Трассировки стека

56
задан Community 23 May 2017 в 12:18
поделиться

16 ответов

Наиболее распространенная оболочка, безусловно, на Linux является ударом. Если у Вас нет серьезного основания использовать альтернативу, я предположил бы, что придерживающийся удара или обычно используемой оболочки Вашей проектной группой (или что объем сценариев оболочки необходимо работать с), использование.

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

Это действительно - персональное предпочтение, ну, в общем, за исключением csh.

63
ответ дан joe 26 November 2019 в 16:58
поделиться

Для записи фактических сценариев я предпочитаю ksh, который имеет несколько расширений, полезных для программирования, и фиксирует одно из моих любимых раздражений .

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

1
ответ дан Community 26 November 2019 в 16:58
поделиться

Я использую pdksh все время, не имея ничего похожего к идеальному вводу (возможно, необходимо ли зафиксировать termcap?).

ksh является стандартом, csh является стандартом, и удар является 'стандартным', но на Linux только. Лучше предназначаться для ksh.

1
ответ дан james2vegas 26 November 2019 в 16:58
поделиться

Мне нравится ksh на самом деле. Это немного более последовательно, чем удар, потому что это не пытается поддерживать любые конструкции csh. tcsh, по моему опыту, наименее совместим с другими оболочками, и я избегаю его. Я пытаюсь записать сценарии в sh, но ksh действительно имеет некоторые хорошие функции как экспорт и установка переменной на одной строке. Я пытаюсь сохранить совместимость с ударом также, так как это полнофункционально и распространено. Для записи портативных сценариев оболочки, который более важен, чем выбор "лучшей" оболочки, Вы могли бы консультироваться с этой книгой.

Портативное Программирование Shell: Обширный Набор Примеров Оболочки Bourne (HP Professional Series) Bruce Blinn (Paperback - 29 октября 1995) amazon.com

1
ответ дан Jason Catena 26 November 2019 в 16:58
поделиться

Просто не используйте Korn Shell (ksh).

, Если Вы не имеете идеальный ввод и никогда не должны использовать клавишу Backspace.

2
ответ дан TM. 26 November 2019 в 16:58
поделиться

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

3
ответ дан user34292 26 November 2019 в 16:58
поделиться

Проблема с csh состоит в том, что это - дерьмо для сценариев, как объяснено здесь . Нет никакой настоящей причины, почему Вы не должны использовать его в качестве интерактивной оболочки, но большинство людей находит его запутывающей необходимостью изучить две различных оболочки и неспособность испытать биты их сценариев на командной строке, таким образом, является самым легким использовать то же для всего.

очевидные кандидаты на интерактивную оболочку являются ударом, тире, zsh и {фунт} ksh. Все они реализуют стандарт оболочки posix с некоторыми незначительными расширениями. Выберите, какой бы ни Вам нравится за интерактивное использование, я был бы склонен идти с ударом просто, потому что это - стандарт на Linux, но у них всех есть свои достоинства, и zsh в особенности кажется популярным.

, Если Вы пишете сценарий, что Вы намереваетесь быть портативными, используйте #!/bin/sh и удостоверьтесь, что Вы используете стандарт posix синтаксис оболочки. Если это работает и над ударом и над ksh, это, вероятно, стандартно. Существуют некоторые старые версии Unix, которые имеют нестандартный/bin/sh, но я не обеспокоился бы тем, что, если Вы не знаете, Вы имеете к. Большим количеством проблемы для мобильности являются все инструменты командной строки, которые Вы называете из своего сценария.

6
ответ дан Mark Baker 26 November 2019 в 16:58
поделиться

Bash. Это стандартно.

6
ответ дан Paul Nathan 26 November 2019 в 16:58
поделиться

Так как я полагаю, что я - человек, который предложил, чтобы Вы использовали что-то другое, чем Оболочка C, возможно, я должен, должен квалифицировать мои комментарии немного, и затем поддерживать тех, кто сказал 'удар относительно Linux, оболочку Korn на других платформах (если удар не установлен там также)'.

Скорее как редакторы (Вы предпочитаете vim или emacs), выбором оболочки является частично вопрос знакомства и частично вопрос предпочтения. Существуют многие, кому нравится оболочка C, хотя я действительно полагаю, что это менее легко программируемо, чем Оболочка Bourne и производные. То, что я имею в своем .cshrc, действительно, эквивалентно exec /bin/ksh (это не тождественно, что, потому что я хочу выполнить оболочку входа в систему - та, которая читает профиль и так далее), но я не осудил бы никого за использование оболочки C или производной, если это - обоснованное решение.

, Если Вы решаете, что хотите использовать что-то другое, чем оболочка C, тогда Вы находитесь в основном в лагере Оболочки Bourne, для которого стандарт POSIX более или менее определяет ожидаемое поведение и затем различные оболочки - то есть, Граница, Korn или Перенесенный Снова окружают - добавляют (или, в случае классической Оболочки Bourne, вычтите), несколько функций. Если Ваш код, возможно, когда-либо должен был бы отъехать Linux к HP-UX, Солярис или AIX (выживающее трио классика, AT& варианты Unix T-derived), тогда необходимо рассмотреть обеспечение, Вы пишете свои сценарии оболочки в классической Оболочке Bourne, хотя оболочка Korn также довольно безопасна. Обратите внимание, тем не менее, что на Linux можно записать #!/bin/sh и получить Bash на других платформах, Вы получите Оболочку Bourne.

я переключаюсь между оболочкой Korn и Bash без основных проблем - и редко с незначительными проблемами. Я склонен избегать тех углов любого языка, которые не четко определены - который имеет тенденцию означать 'определенный в обоих'. Другая проблема для тех, которые используют Linux, состоит в том, что инструменты GNU имеют больше опций, чем классические версии Unix, и можно потерять мобильность не из-за конструкций программирования оболочки, которые Вы используете, но из-за опций команды Вы используете. Опыт и свободный доступ к страницам руководства других систем помогают чрезвычайно.

18
ответ дан Jonathan Leffler 26 November 2019 в 16:58
поделиться

Я обычно придерживаюсь удара, потому что это является более дружественным, чем прямой sh, и это - значение по умолчанию на каждом дистрибутиве, который я полурегулярно использовал (SuSE, RHEL, Ubuntu, Slackware).

, Если Вы планируете записать, портативные сценарии оболочки, однако, удостоверяются, что работают в реальный шеннон.

8
ответ дан warren 26 November 2019 в 16:58
поделиться

Рыба (Дружественный Интерактивный Shell) является хорошей альтернативой большинству других оболочек. Это имеет непротиворечивый синтаксис, хорошее заполнение клавишей Tab и подсветку синтаксиса, легко к погрузке и использованию (особенно, если у Вас нет привычек от других оболочек), и имеет превосходную справку во время выполнения.

Оборотная сторона - то, что это беспорядочно разрабатывается, имеет маленькое (но полезный) база пользователей, и очень отличается, чем другие оболочки. Назад совместимость с идиомами оболочки не была приоритетом.

Во многих случаях это хорошо..., много стандартных оболочек имеет действительно глупые способы сделать вещи, просто потому что это всегда делалось тот путь. "/делайте", "case/esac", "if/fi"? Это - безумие, с которым покончила рыба.

Это достойное внимания.

23
ответ дан Rhubbarb 26 November 2019 в 16:58
поделиться

Для интерактивности используйте Zsh. Некоторое время я был специалистом по обслуживанию порта FreeBSD сценариев заполнения клавишей Tab Bash, но отказался от него, как только я попробовал Zsh впервые. Это может сделать все, что Bash может сделать, но более легко и более изящно. Это также имеет хорошее свойство наличия чрезвычайно подобных Удару нажатий клавиш, поэтому если Вы будете в системе без Zsh, Вы будете в состоянии суметь обойтись (даже если это как "не чувствовало бы себя прекрасно").

Для сценариев, используйте Оболочку Bourne (sh). Это - язык сценариев стандарта POSIX, и Ваши сценарии, как в значительной степени гарантируют, будут работать везде. Bash и Zsh и другие оболочки имеют хорошие расширения, которые Вы пропустите, но те связывают Вас с определенной установкой. Проигнорируйте тот совет для personal-use-only сценариев, что Вы уверены, что никогда не будете работать в другое место, но помнить, что это - реальный компромисс, который необходимо рассмотреть.

, Но таким образом, Zsh. Я не знаю ни о ком, кто попробовал его, кто сразу и постоянно не переключился. Это действительно настолько хорошо.

27
ответ дан Kirk Strauser 26 November 2019 в 16:58
поделиться

Я предпочитаю zsh.

одно только заполнение клавишей Tab стоит того:

  • Это разворачивает подстановочные знаки, если Вы захотите (удобный, когда Вы хотите удалить всех кроме одного файла в каталоге)
  • , то даст Вам список переключателей после определения, что программа
  • Дает опции заполнения клавишей Tab ниже строки, Вы продолжаете работать, который довольно удобен.

http://zsh.sourceforge.net/

62
ответ дан SomeDork 26 November 2019 в 16:58
поделиться

Я не крупный пользователь Ruby, но http://rush.heroku.com/ взгляды, интересные

3
ответ дан Soft 26 November 2019 в 16:58
поделиться

Я пришел также из CSH, TCSH в Bash. Это отличается, но через некоторое время, по крайней мере, так же хорошо, как C-Shells.

Для сценариев я бы возобновил KSH, потому что он доступен на большинстве Unixes (Solaris, HP-UX, OSF / 1 (лучший Unix Ever;) - за пришло время)) И у него есть хорошие функции. С Korn вы можете программировать большинство скриптов. Спорадикалий, вы хотели бы получить больше, чем номер, как возвращаемое значение из функции, или у вас есть некоторые данные, которые вы не можете поместить в простой массиве, или вам нужно что-то, что имеет лучшие возможности в случае регенсов, или что когда-либо Тогда я бы предложил Perl.

1
ответ дан 26 November 2019 в 16:58
поделиться

Для написания сценариев попробуйте некоторое время использовать dash, чтобы понять, что можно переносить. Если вы когда-нибудь будете использовать bash для написания сценария оболочки, пожалуйста, явно объявите bash в shebang сценария.

Для личного использования консоли экспериментируйте с тем, что есть. Найдите то, с чем вам удобно работать. Будьте эксцентричны и раздражайте всех своих друзей-сисадминов, выбирая оболочку, которая должна быть скомпилирована из исходников для каждой машины, на которой вы собираетесь ее использовать.

1
ответ дан 26 November 2019 в 16:58
поделиться
Другие вопросы по тегам:

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