Рейтинг:1

Проблемы с пониманием основных переменных и команд из-за моего понимания среды Linux

флаг cn

Мне трудно понять некоторые основные понятия о Linux. И влияние некоторых переменных на эти понятия.

Этими основными понятиями являются среда Virtuel, оболочка, tty.

Переменная: $PS1 $ЯЗЫК

Команды:

экспорт (переменная экспорта из одной оболочки в другую оболочку? Это также работает для tty и виртуальных сред? Если я открою новую вкладку в Ubuntu (терминал tty?), она не экспортируется в другую?

окр -я ?

Я думаю, что все эти проблемы связаны с моим базовым пониманием оболочек, виртуальных сред и tty.

Что не хорошо в данный момент.

Итак, я надеюсь, что кто-нибудь будет столь же любезен, чтобы объяснить это мне?

Artur Meinild avatar
флаг vn
Добро пожаловать! Чтобы сделать хороший пост с вопросами и ответами, вы должны сосредоточить свой вопрос только на одной теме. Кроме того, вы можете пройти очень долгий путь, поискав в Интернете некоторые из ваших вопросов - ответы там.
Satoshi Nakamoto avatar
флаг lc
tty — это не оболочка, а форма связи, как и telnet.
Satoshi Nakamoto avatar
флаг lc
https://unix.stackexchange.com/questions/4126/что такое точная разница между терминалом и оболочкой
Satoshi Nakamoto avatar
флаг lc
Я должен отметить этот вопрос (после того, как я проголосовал), потому что большинство ваших вопросов (вы сделали 6) уже продублированы.Вы должны сначала изучить в стеке все эти вопросы, чтобы найти ответ, прежде чем задавать новый вопрос. Ваш вопрос должен быть новым (или, если ваша проблема не может быть решена и она специфична, это должен быть другой вопрос)
Рейтинг:1
флаг cn

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

Интерактивные оболочки запускаются в эмуляторе терминала, который относится к приложениям с графическим интерфейсом как гном-терминал, xtermи т. д., или в пределах TTY, который относится к виртуальной текстовой консоли. TTY доступны с помощью комбинации клавиш Ctrl Альт F1-9. В настольных дистрибутивах Linux среда рабочего стола работает в одном из этих TTY.

Использованная литература:

Независимо от того, эмулятор терминала это или TTY, вы можете делать то же самое с работающей внутри оболочкой.


Оболочка пользователя по умолчанию в Ubuntu: Баш. Существует файл инициализации с именем .bashrc который находится в домашнем каталоге пользователя. Этот файл (наряду с некоторыми другими файлами инициализации системы, такими как /etc/bash.bashrc) является источник когда пользователь открывает новую интерактивную оболочку. Таким образом создается среда пользователя по умолчанию.

Буквально по источникам .bashrc некоторые переменные среды получают определенные значения. Такие переменные окружения:

  • $ПУТЬ который содержит разделенные столбцами системные пути, по которым можно найти исполняемые файлы,
  • $PS1 который определяет как выглядит ваша подсказка, например: пользователь@хост:/текущий/каталог$,
  • $ЯЗЫК который устанавливает локаль по умолчанию, или $LC_ALL который переопределяет все настройки локали (источник этого объяснения, подробнее см. местонахождение человека).

Поэтому, если вы хотите навсегда изменить какую-либо переменную среды (в пользовательской оболочке Bash), вы можете изменить (или установить) ее значение в пределах .bashrc. В противном случае изменение будет действительным только для текущего экземпляра оболочки.

Например, откройте новый терминал и введите PS1='prompt_changed->' и ваше приглашение будет изменено на эту строку. Затем оставьте это окно терминала открытым и откройте новый терминал — вы увидите, что это изменение не применяется там. Чтобы восстановить первый терминал, вы можете вручную получить .bashrc файл по команде . ~/.bashrc.


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

user@host:~$ VAR='Привет!' # Определите переменную с именем VAR
user@host:~$ echo $VAR # Вывод значения переменной
Привет!
user@host:~$ export VAR # Экспорт переменной
user@host:~$ bash # Создать новую оболочку bash
user@host:~$ echo $VAR # Вывод значения экспортируемой переменной
Привет!
user@host:~$ exit # Выход в родительскую оболочку
user@host:~$ sh # Разветвить новую оболочку sh (тире)
$ echo $VAR # Вывести значение экспортируемой переменной
Привет!

Команда окружение используется для изменения среды выполнения команды или скрипта. Вот несколько строк из человек окружение:

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

Вызвать утилиту именно с той средой, которая указана в аргументах; унаследованная среда должна полностью игнорироваться.

Следующая команда: env -i PATH=/mybin mygrep xyz мой файл вызывает команду мойгреп с новым ДОРОЖКА value как единственная запись в его окружении. В таком случае, ДОРОЖКА используется для обнаружения мойгреп, который затем должен находиться в /mybin.

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

При запуске без аргументов окружение Команда выводит список переменных среды.


Еще раз, .bashrc файл в домашнем каталоге настраивает функции оболочки, такие как создание или изменение переменных и псевдонимов, а также определение функций.

Например, давайте определим следующую функцию в нижней части .bashrc файл.

hello() { echo "Привет, ${USER^}!"; }

После сохранения файла вы можете получить его или открыть новый экземпляр терминала и ввести Привет.

spas@host:~$ привет
Привет, Спас!

Итак, мы видим, что эта функция (или переменная, или псевдоним) доступна в текущей оболочке. На этом этапе называется местный функция (или переменная, или псевдоним), поэтому, если мы проверим среду с помощью окружение | привет привет нашей функции там не будет. Локальные переменные существуют только в текущей оболочке и не могут влиять на другие команды или приложения.

После определения функции (переменной, псевдонима) в .bashrc мы можем экспортировать его, чтобы сделать его доступным для вспомогательных оболочек (команд или сценариев), разветвленных из текущей оболочки - таким образом, он становится Глобальный или же среда функция (переменная, псевдоним).

hello() { echo "Привет, ${USER^}!"; }
экспорт -f привет
spas@host:~$ source ~/.bashrc # в bash 'source' является синопсисом '.'
spas@host:~$ env | grep 'hello' # анализируем 'hello' в выводе 'env'
BASH_FUNC_hello%%=() { echo "Привет, ${USER^}!"
spas@host:~$ bash -c 'hello' # разветвить неинтерактивную подоболочку
Привет, Спас! # и выполняем функцию внутри

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

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

Satoshi Nakamoto avatar
флаг lc
Ваш ответ не отвечает «Я не понимаю оболочки в tty ...», а отвечает «Я не понимаю .. ($ PS1, export, env, $ LANG)», тогда я проголосовал, но этот вопрос должен быть будьте сосредоточены, здесь, в стеке, уже есть ответ для tty.
Satoshi Nakamoto avatar
флаг lc
Он задал 6 разных вопросов: 1. Какова цель PS1 (на самом деле есть много технических подробностей по этой теме) 2. запуск второй виртуальной оболочки на том же tty? 3. Я могу экспортировать переменные в другие оболочки в первой оболочке 4. Вы можете использовать команду env для установки $LANG... 5. Что на самом деле делает env -i? 6.базовое понимание оболочек и tty

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.