Вопрос Справка Понимание строки в .bashrc


Я пробовал искать везде, чтобы определить, что эта строка делает в моем .bashrc. Причина, по которой я хочу знать, заключается в том, что теперь ~ / .pam_environment рекомендуемые, Это строка:

[[ -s /home/$USER/.nvm/nvm.sh ]] && . /home/$USER/.nvm/nvm.sh

Я думаю, что я сузил его до проверки условий, чтобы убедиться, что nvm.sh файл существует и что он больше 0 байтов. Но я не понимаю, что следует. && обычно означает «и», но я не понимаю, почему это необходимо после проверки, а также почему . не прикрепляется к имени файла.

В основном, что я хочу знать, как бы я поместил это в свою .pam_environment файл, который принимает только выражения присваивания.

Редактировать: Эта строка в настоящее время позволяет мне запускать NVM с терминала, но я действительно хотел бы знать только ради обучения.


3
2018-06-20 04:48


происхождения




ответы:


Да, вы правы, что [[ -s ... ] проверяет, существует ли файл. Если это произойдет, он выйдет со статусом 0, а если нет, то он будет 1 (т. е. сбой).

&& command / operator / whatever запускает следующую команду, если команда до ее завершения (то есть статус выхода 0). ||, напротив, запускает следующую команду, если команда перед сбоем (т. е. не 0).

имеющий . перед тем как имя файла (с пробелом между ними) запускает файл, но также сохраняет любые изменения переменных среды, которые он делает. Например, если я сделаю test.sh как это:

#!/bin/bash
FOO=bar
BAR=baz
BAZ=foo
PATH="FOO:$PATH"

и я бегу . path/to/test.sh, появятся новые переменные: FOO, BAR, а также BAZ, а также PATH будет обновлено. Заметить, что source, Я думаю, делает то же самое, что и ., РЕДАКТИРОВАТЬ: Да, source а также . являются синонимами в bash.


3
2018-06-20 05:03



Так можно ли вставить файл .pam_environment, так как переменная устанавливается для сеанса? - Adam Beck
@AdamBeck Я в этом сомневаюсь. По-видимому, синтаксис очень ограничен (help.ubuntu.com/community/...). Я бы рекомендовал пройти nvm.sh и копирование присвоений переменных .pam_environment, - MiJyn