Как узнать свой путь через оболочку Linux - PullRequest
11 голосов
/ 16 января 2009

Я хочу перестать терять драгоценное время при работе с оболочкой Linux / Unix.

Если бы я смог понять это хорошо, это было бы здорово. В противном случае:

  • Я могу потерять день только для настройки crontab.
  • Я буду удивляться, почему шебанг в этом скрипте не работает.
  • Мне будет интересно, какова реальная разница между:
    • . run.sh
    • . / Run.sh
    • . ./run.sh
    • sh run.sh
    • ш ./run.sh

Видите ли, именно такие вещи наносят вред моей жизни в Linux / Unix.

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

Какое окончательное решение?

Ответы [ 11 ]

15 голосов
/ 16 января 2009

Просто для удовольствия:

  1. . run.sh --- «Исходный» код в run.sh. Обычно это используется для получения переменных среды в текущих процессах оболочки. Вы, вероятно, не хотите этого для скрипта с именем run.sh.

  2. ./run.sh --- Выполнить скрипт run.sh в текущем каталоге. Обычно текущий каталог не находится в пути по умолчанию (см. $PATH), поэтому вам необходимо явно указать относительное местоположение. Символ . используется иначе, чем в элементе № 1.

  3. . ./run.sh --- Источник сценария run.sh в текущем каталоге. Это сочетает в себе использование . из предметов № 1 и № 2.

  4. sh run.sh --- Используйте интерпретатор оболочки sh на run.sh. Оболочка Bourne обычно используется по умолчанию для запуска сценариев оболочки, поэтому она, вероятно, совпадает с элементом № 2, за исключением того, что она находит первый run.sh в $PATH, а не текущий в текущем каталоге.

  5. sh ./run.sh --- И это обычно то же самое, что и № 2, за исключением слова.

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

С точки зрения обучения, я бы предложил использовать bash или ksh и не позволять никому уговаривать вас на что-то другое, пока вы не почувствуете себя комфортно. Пожалуйста, не учитесь с csh, иначе вам придется слишком много учиться, когда вы начнете с оболочки типа Борна позже.

Кроме того, записи crontab немного сложнее, чем другие варианты использования оболочки. Я думаю, вы потеряли время, потому что ваша среда была настроена иначе, чем в командной строке. Я бы предложил начать где-нибудь еще, если это возможно.

12 голосов
/ 16 января 2009

Справочные страницы, вероятно, являются «окончательным» решением. Я всегда поражаюсь, какие драгоценности они содержат.

Вы даже можете использовать man bash, чтобы ответить на некоторые вопросы, которые вы поднимаете в этом вопросе.

3 голосов
/ 16 января 2009

Попробуйте страницы BASH проекта документации Linux здесь [tldp.org] .
PS: разница в том что. совпадает с исходной командой. Это требует только разрешения на чтение. Чтобы использовать ./run.sh, вам нужны права на выполнение. Когда вы используете 'sh', вы явно указываете команду, с которой хотите запустить скрипт (здесь вам нужно только разрешение на чтение). Если вы используете оболочку для ее выполнения, проблем не должно быть. Если вы хотите использовать другую программу, такую ​​как 'python', вы можете использовать python run.py. Еще одна хитрость - добавить строку #!<program> в начало вашего скрипта. В вашем случае подойдет #!/bin/sh, а для Python лучше всего будет #/usr/bin/env python.

2 голосов
/ 16 января 2009

У Oreily есть старая книга , которая рассказывает вам о bash и сценариях bash в конце. Большинство всего, что вам нужно знать, находится в Интернете, но распространяется.

2 голосов
/ 16 января 2009

Я думаю, что погрузиться в это ответ. Это как учиться ходить, печатать, пользоваться эргономичной клавиатурой или печатать на двораке. Сделайте это полностью. И да, вы будете абсолютно тормозить. И вы будете вынуждены постоянно смотреть в свои руки или гуглить вещи. Но в конце концов это придет к вам.

Забавная история, я убил доступ в интернет в своей квартире, выпуская ifconfig. Полностью не знал, что ifconfig Обновить не было командой. Должен был позвонить другу, когда Google не загружается;) dhcpcd позже, и я вернулся к поиску во всем.

1 голос
/ 17 января 2009

Хотя лучше придерживаться Bash, но просто учиться, оболочка fish может быть немного проще в использовании. Я играл с ним несколько недель, и, хотя он казался не таким мощным, как bash, он казался довольно удобным для пользователя.

1 голос
/ 16 января 2009

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

Потратьте некоторое время на чтение таких уроков и, прежде всего, на игру в оболочке. Довольно скоро он начнет ощущаться как $ HOME. (Хорошо, извините за плохой каламбур ...)

1 голос
/ 16 января 2009

часто используйте оболочку, набирайте "[prog-name] --help" много, много печатайте "man [prog-name]" и делайте заметки о том, что работает, а что нет - даже если те заметки кажутся очевидными в то время. К завтрашнему дню они могут снова не стать такими очевидными. OTOH, через пару недель они определенно должны быть!

Познакомьтесь с некоторыми книгами по работе с оболочками, такими как От Bash до Z Shell (охватывает Bash и Z), изучите учебник по написанию сценариев оболочки или руководство пользователя Gnu's Bash.

1 голос
/ 16 января 2009

Лучший способ учиться - это читать, а затем пробовать что-то. Страницы MAN часто бывают очень полезны, и существует множество учебных пособий по сценариям Shell. Если вам нужны сценарии оболочки, просто прочитайте, а затем попрактикуйтесь в том, что вы читаете, написав маленькие сценарии, которые делают что-то интересное или забавное. Если вам нужна дополнительная информация обо всех различных приложениях командной строки, которые можно запускать из оболочки, они более зависимы от дистрибутива, поэтому обратитесь к документации по вашему любимому дистрибутиву.

0 голосов
/ 16 января 2009

Я нахожу попытки выучить новую команду, используя страницы руководства, иногда немного подавляющие.

Я предпочитаю справочные страницы для обновления моей памяти.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...