На этот вопрос уже есть ответ здесь:
. bashrc и bash.bashrc включают:
[-z "$ {debian_chroot: -}"]
На странице руководства Bash указано следующее для раскрытия параметров в следующей форме: $ {параметр: -word}
Если параметр не задан или равен нулю, расширение слова заменяется. В противном случае подставляется значение параметра .
Зачем писать
"$ {debian_chroot: -}"
, а не просто
"$ {debian_chroot}"
?
Ответ I Я использую: https://www.reddit.com/r/Ubuntu/comments/3xb9sp/debian_chroot_why_bother_with/
Часть, которую Вы упоминаете, прибывает ранее в эти .bashrc
, в то время как то, что упоминается в дубликате, прибывает немного позже, в PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
часть. Они сотрудничают, хотя!
Поэтому, что делает код, который Вы упоминаете, говорят с точки зрения простого английского языка? Здесь это для ссылки.
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
Это запускается с этой части ${debian_chroot:-}
. У нас есть тот debian_chroot
, переменная установила? Если да, эхо, что переменная, но если не - повторяют то, что прибывает после -
. И что прибывает после -
? Ничто! Точно это! Почему беспокойство? Что, если переменная установлена? Тогда мы не должны выполнять тело, если оператор и просто использует debian_chroot
переменная , как в подсказке PS1 позже. Помните, что я сказал, что те две части кода сотрудничают? Хорошо, идущий дальше.
Следующий шаг, если мы оценили переменную, чтобы быть пробелом, мы проверяем на существование читаемых /etc/debian_chroot
файл. На Ubuntu 14.04, по крайней мере, нет никакого /etc/debian_chroot
файл. Таким образом каждый раз, когда Вы запускаете удар, он идет, "О, таким образом, debian_chroot не установлен, и у нас нет того файла там...OK, оставьте только \u@\h:\w\$ в подсказке!"
Теперь, что происходит, если у нас ДЕЙСТВИТЕЛЬНО есть тот файл?
xieerqi:
$ sudo vi /etc/debian_chroot
[sudo] password for xieerqi:
xieerqi:
$ bash
(HELLOWORLD)xieerqi@eagle:~$ echo $debian_chroot
HELLOWORLD
(HELLOWORLD)xieerqi@eagle:~$
хорошо, проследите код снова: мы имеем debian_chroot
, устанавливают? Нет. У нас есть тот /etc/debian_chroot
файл? Да, поэтому возьмите его содержание и пихните их в это пользователи PS1
подсказка. Похож это точно, что произошло в моем выводе, правильно?