1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-llthw-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
ex5.md 7.1 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 25.11.2024 03:02 8398775

Вот перевод текста на русский язык:

Упражнение 5: Bash: переменные окружения, env, set, export

Исходный текст: Exercise 5. Bash: environment variables, env, set, export

Переводчик: Летающий дракон

Лицензия: CC BY-NC-SA 4.0

С гордостью использую Google Translate.

Рассмотрим следующее: вы хотите, чтобы программа выводила ваше имя пользователя. Как программа узнает об этом? В Linux есть несколько переменных окружения. Это означает, что в вашей оболочке есть множество переменных, многие из которых устанавливаются автоматически, и некоторые из них передаются программе при каждом её запуске.

Подробности:

  • Некоторые переменные предназначены только для вашего текущего сеанса оболочки. Они называются локальными переменными оболочки. Вы можете увидеть их, набрав set, встроенную команду bash, без запуска других программ, а затем выполнив её. Эта команда обрабатывается самим bash.

  • Другие переменные передаются каждой программе, запущенной из вашей текущей оболочки. Они называются переменными окружения и могут быть просмотрены с помощью программы env, которая покажет вам, какие переменные получает каждая запущенная вами программа.

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

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

Как это сделать

1: foo='Hello World!'
2: echo $foo
3: set | grep foo
4: env | grep foo
5: export foo
6: env | grep foo
7: foo='ls -al'
8: $foo

Что вы увидите

uset1@vm1:~$ foo='Hello World!'
user1@vm1:~$ echo $foo
Hello World!
user1@vm1:~$ set | grep foo
foo='Hello World!'
user1@vm1:~$ env | grep foo
user1@vm1:~$ export foo
user1@vm1:~$ env | grep foo
foo=Hello World!
user1@vm1:~$ foo='ls -al'
user1@vm1:~$ $foo
total 36
drwxr-xr-x 2 user1 user1 4096 Jun 14 12:23 .
drwxr-xr-x 3 root  root  4096 Jun  6 21:49 ..
-rw------- 1 user1 user1 4042 Jun 15 18:52 .bash_history
-rw-r--r-- 1 user1 user1  220 Jun  6 21:48 .bash_logout
-rw-r--r-- 1 user1 user1 3184 Jun 14 12:24 .bashrc
-rw------- 1 user1 user1   50 Jun 15 18:41 .lesshst
-rw-r--r-- 1 user1 user1  697 Jun  7 12:25 .profile
-rw-r--r-- 1 user1 user1  741 Jun  7 12:19 .profile.bak
-rw-r--r-- 1 user1 user1  741 Jun  7 13:12 .profile.bak1

Объяснение

  1. Создайте переменную foo и поместите в неё строку Hello World!.
  2. Выведите значение переменной foo.
  3. Выведите список всех переменных среды, передаваемых команде grep, и отобразите строки, содержащие только переменную foo. Обратите внимание, что переменная foo существует.
  4. Выведите список всех переменных среды, которые передаются любой выполняемой вами программе. Обратите внимание, что переменной foo нет.
  5. Сделайте переменную foo доступной для всех программ, выполняемых из текущей оболочки.
  6. Теперь вы видите, что ваша переменная действительно доступна для всех выполняемых вами программ.
  7. Поместите ls / в переменную foo.
  8. Выполните команду, содержащуюся в переменной foo.

Дополнительное задание

  • Введите и выполните команды env и set. Сколько разных переменных вы видите? Не беспокойтесь, обычно вы можете быстро узнать о назначении переменной, выполнив поиск в Google. Попробуйте это сделать.

  • Попробуйте ввести:

set | egrep '^[[:alpha:]].*$'

Теперь попробуйте выполнить set. Видите, что я здесь сделал? Быстрое объяснение:

egrep '^[[:alpha:]].*$'

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

PS1_BAK=$PS1
PS1='Hello, world! $(pwd) > '
PS1=$PS1_BAK

Обратите внимание, что я использую $(pwd), который выводит команду как доступ к переменной. Теперь введите man bash /PS1 (да, просто косая черта), нажмите <ENTER>. Теперь вы можете нажать n, чтобы просмотреть следующий результат. Просмотрите PROMPTING и нажмите q, чтобы выйти из man. Теперь перейдите на http://stackexchange.com/ и найдите bash PS1. Поймите разницу между этими двумя источниками документации.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-llthw-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-llthw-zh.git
oschina-mirror
wizardforcel-llthw-zh
wizardforcel-llthw-zh
master