Вот перевод текста на русский язык:
Упражнение 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
foo
и поместите в неё строку Hello World!
.foo
.grep
, и отобразите строки, содержащие только переменную foo
. Обратите внимание, что переменная foo
существует.foo
нет.foo
доступной для всех программ, выполняемых из текущей оболочки.ls /
в переменную foo
.foo
.Введите и выполните команды env
и set
. Сколько разных переменных вы видите? Не беспокойтесь, обычно вы можете быстро узнать о назначении переменной, выполнив поиск в Google. Попробуйте это сделать.
Попробуйте ввести:
set | egrep '^[[:alpha:]].*$'
Теперь попробуйте выполнить set
. Видите, что я здесь сделал? Быстрое объяснение:
egrep '^[[:alpha:]].*$'
Просто выводит строки, начинающиеся с буквы, игнорируя остальные строки. Сейчас не стоит зацикливаться на этом, и не беспокойтесь о символе |
. Позже я объясню его.
Прочтите разницу между командами env
и set
здесь: http://stackoverflow.com/questions/3341372/differnce-between-the-shell-and-environment-variable-in-bash. Помните, stackoverflow — ваш друг! Я буду повторять это много раз.
Попробуйте выполнить set FOO=helloworld bash -c 'echo $FOO'
. Здесь объяснение: http://stackoverflow.com/questions/10938483/bash-specifying-environment-variables-for-echo-on-command-line. Опять же, не слишком зацикливайтесь, вы столкнётесь с этим снова после большого количества практики, я обещаю.
Попробуйте это:
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 )