Невозможно понять строку в .bashrc - PullRequest
2 голосов
/ 27 апреля 2009

Я нашел следующий код в чьем-то .bashrc

# Source global definitions 
[ -f /etc/bashrc ] && . /etc/bashrc

Это, видимо, вызвало много дубликатов Bash.

Что означает однострочник?

Ответы [ 4 ]

11 голосов
/ 27 апреля 2009

Проверяет наличие файла / etc / bashrc и выполняет его, если проверка прошла успешно. Команда dot является псевдонимом для команды «source».

8 голосов
/ 27 апреля 2009

Что может вас смущать: [ на самом деле является командой оболочки Unix. Вы можете найти его в /bin, а если присмотреться, это жесткая ссылка на команду test, что означает, что вы также можете написать:

test -f /etc/bashrc && source /etc/bashrc

(. - это сокращение для source).

Историческая справка для вашего удовольствия: когда Unix был изобретен, не было экранов, кроме «телетайпов», которые являются своего рода пишущей машинкой. Вы отправили команду на хост Unix, и телетайп напечатает результат. Слух звучит так: поскольку ранние разработчики Unix устали от всех ракет, созданных телетайпами, они пытались сократить все команды до двух букв, а все опции - до одной буквы.

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

И если вы посмотрите на /dev, вы увидите все эти tty файлы, единственное, что осталось от исходных телетайпов.

[РЕДАКТИРОВАТЬ] Как выяснить, что эти [ и test - это одно и то же:

Это двухэтапный процесс. ls -il [ test echo дает:

356954 -r-xr-xr-x 2 root wheel 46K May 31 2008 [
356954 -r-xr-xr-x 2 root wheel 46K May 31 2008 test
67392  -rwxr-xr-x 1 root wheel 18K Sep 22 2007 echo

Сначала вы замечаете «2» перед «корнем». Это означает, что есть две записи каталога (имена файлов a.k.a), которые указывают на одни и те же данные (Unix lingo: inode, i-node или "index node"). Каждый индекс на диске имеет уникальный номер, который является первым номером в приведенном выше примере (356954). Вы можете видеть, что [ и test используют один и тот же индекс, но echo не имеет.

Обратите внимание, что нет быстрого способа получить все записи каталога, которые указывают на один и тот же индекс. Вы должны выполнить поиск по всей файловой системе для записи с тем же индексом (используя find /path -inode 356954)

[EDIT2] Что касается tty "файлов": это фактически узлы устройства. Первая буква разрешений - «c», как в «символьном устройстве». Вы можете найти «-» для файлов, «d» для каталогов и «b» для блочных устройств (таких как жесткие диски, дискеты и т. Д.). Это не файл, но это действительно программа. Вы можете поговорить с ним, отправив ему данные («записав» что-то в «файл») или считав данные из него. Концепция казалась настолько близкой к реальным файлам, что изобретатели Unix использовали файловый API плюс что-то, называемое «управление IO» (или ioctl), для отправки специальных команд (например, запрос терминала на его размер).

Если вы переключитесь в режим консоли («Ctrl-Alt-F1»), вы увидите что-то вроде:

Welcome to .... - Kernel .... (tty1)

Переключитесь на другую консоль (с Alt-F2 ... Alt-F6), и вы увидите, что они подключены к tty2 к tty6. Авторизуйтесь на одном из них и попробуйте

эхо-тест> / dev / tty1

И строка появится на консоли, подключенной к tty1. Чтение из tty не так просто, так как из него уже есть чтение программы (либо mingetty, если вы не вошли в систему, и login или bash после входа в систему). Если вы попробуете read line < /dev/tty1, это будет конфликтовать с программой, которая уже запущена на этой консоли, но в принципе это будет работать.

8 голосов
/ 27 апреля 2009

Если существует / etc / bashrc (оператор -f), выполните его.

Это работает, потому что && (логический оператор AND) оценивает второй аргумент, только если первый является истинным (для ускорения). Так что, если файл существует, запустите его!

На самом деле это называется «И-конструкцией списка».

См. здесь для получения дополнительной информации.

Вы также можете рассмотреть следующий часто используемый пример:

make && make install

Устанавливается только в случае успешного завершения make.

2 голосов
/ 28 апреля 2009

Я не уверен, почему ты не спросил здесь :) http://comments.pixelbeat.org/settings/

Более подробный эквивалент этой команды:

if test -r /etc/bashrc; then
 source /etc/bashrc
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...