Skip to content

The objective of this project is for you to create a simple shell. Your little bash or zsh. You will learn a lot about processes and file descriptors.

Notifications You must be signed in to change notification settings

evvvsss/minishell

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 

Repository files navigation

minishell

The objective of this project is for you to create a simple shell. Your little bash or zsh. You will learn a lot about processes and file descriptors.

export

Подумайте над следующим примером:

$ a=linuxcareer.com
$ echo $a
linuxcareer.com
$ bash
$ echo $a

$
Строка 1: создается новая переменная с именем "a", содержащая строку "linuxcareer.com".
Строка 2: мы используем команду echo, чтобы вывести содержимое переменной "a".
Строка 3: мы создаем дочерний экземпляр оболочки bash.
Строка 4: переменная "a" теперь не определена.

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

$ a=linuxcareer.com
$ echo $a
linuxcareer.com
$ export a
$ bash
$ echo $a
linuxcareer.com
$
Теперь в строке 3 мы использовали команду export, чтобы экспортировать переменную "a" в созданный новый дочерний процесс. В результате переменная "a" все еще содержит строку "linuxcareer.com", даже после создания нового экземпляра оболочки bash. Здесь важно отметить, что для успешного экспорта "a" необходимо, чтобы процесс, в который экспортируется переменная, ответвлялся от того родительского процесса, из которого экспортируется эта переменная. Связь между дочерним и родительским процессами описана ниже.

unset

Сбрасывает значение переменной

Разница между одинарными ' и двойными " кавычками

Single quotes won't interpolate anything, but double quotes will. For example: variables, backticks, certain \ escapes, etc. Но очень важно в двойных кавычках поставить $, чтобы выполнилась команда))
Example:

$ echo "$(echo "upg")"
upg
$ echo "(echo "upg")"
(echo upg)
$ echo '$(echo "upg")'
$(echo "upg")

Стандартные переменные окружения и оболочки

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

SHELL: описывает оболочку, где будет выполняться интерпретация любых команд, которые вы вводите. В большинстве случаев по умолчанию будет использоваться bash, но другие значения можно установить, если вы предпочитаете использовать другие варианты.
TERM: указывает тип терминала, который будет использоваться при запуске оболочки. Различные аппаратные терминалы могут имитироваться согласно различным операционным требованиям. Скорее всего вам не придется думать об этом.
USER: текущий пользователь, для которого выполнен вход.
PWD: текущий рабочий каталог.
OLDPWD: предыдущий рабочий каталог. Эта информация сохраняется оболочкой, чтобы выполнять переход к предыдущему каталогу с помощью команды cd -.
LS_COLORS: цветовые коды, которые используются для опционального добавления цветного вывода для команды ls. Эта команда используется для выделения различных типов файлов и предоставления пользователю большего количества информации при беглом просмотре.
MAIL: путь к почтовому ящику текущего пользователя.
PATH: список каталогов, которые система будет проверять при поиске команд. Когда пользователь вводит команду, система будет проверять каталоги в указанном здесь порядке при поиске исполняемого файла.
LANG: текущий язык и настройки локализации, включая кодирование символов.
HOME: домашний каталог текущего пользователя.
_: последняя предыдущая выполненная команда.

Function: void rl_clear_history (void)

Clear the history list by deleting all of the entries, in the same manner as the History library's clear_history() function. This differs from clear_history because it frees private data Readline saves in the history list.

int fstat(int handle, struct stat *statbuf)

Прототип: stdio.h Описание: Эта функция не определена стандартом ANSI С. Функция fstat() заполняет структуру, на кото­рую указывает statbuf, информацией о файле, связанном с дескриптором файла handle. Инфор­мация о содержимом stat может быть найдена в файле sys\stat.h.

При успешном заполнении структуры типа stat возвращается 0. При ошибке возвращается —1 и errno устанавливается в EBADF.

About

The objective of this project is for you to create a simple shell. Your little bash or zsh. You will learn a lot about processes and file descriptors.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published