Что означает $ {PATH: +: $ {PATH}}?

Если /var/log/journal не существует, по умолчанию systemd journal будет храниться в памяти и, таким образом, будет потерян при перезагрузке.

Просмотрите официальную документацию по журналу systemd, особенно список конфигурационных файлов в верхней части, которые вы, возможно, захотите пересмотреть, и опцию Storage=.

Возможно, запись в журнал происходит, но теряется при перезагрузке до того, как вы сможете просмотреть журнал, из-за конфигурации Storage= для журнала systemd.

25
04.03.2016, 01:48
2 ответа

Вы правы, это означает 'если $PATH существует - и не является нулевым - тогда добавьте :$PATH'.

Вам нужно проверить, существует ли $PATH, потому что вы не хотите добавлять ведущее (или последующее) двоеточие, если $PATH не определен. Имя каталога нулевой длины (null) в пути, как в :/usr/local/bin:/usr/bin, или /usr/local/bin:/usr/bin:, или /usr/local/bin::/usr/bin, означает поиск в текущем каталоге.

Выдержка из man bash:

   PATH   ...
          A zero-length (null) directory name in the value of PATH indicates 
          the current directory.  A  null  directory name may appear as two 
          adjacent colons, or as an initial or trailing colon.
          ...

Это, вероятно, не то, что вы хотите сделать.

Следующие две строки делают то же самое:

PATH=":/bin"        # search current directory, then /bin
PATH=".:/bin"
9
27.01.2020, 19:40

Форма :+ является формой расширения параметра:

${параметр:+[слово]} : Использовать альтернативное значение.

Если параметр не задан или null, будет подставлен null; в противном случае будет использовано расширение слова (или пустая строка, если слово опущено) будет заменено.

Другими словами, если переменная $var определена, то echo ${var:+foo} выведет foo, а если нет, то пустую строку.

Второй : не представляет собой ничего особенного. Это символ, используемый в качестве разделителя в списке каталогов в $PATH. Так, PATH="/usr/local/bin:/usr/bin${PATH:+:${PATH}}" - это сокращенный способ написать:

if [ -z "$PATH" ]; then
    PATH=/usr/local/bin:/usr/bin
else
    PATH=/usr/local/bin:/usr/bin:$PATH
fi

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

$ PATH="/usr/bin"
$ PATH="/new/dir:$PATH" ## Add a directory
$ echo "$PATH"
/new/dir:/usr/bin

Но если PATH не установлен:

$ unset PATH
$ PATH="/new/dir:$PATH"
$ echo "$PATH"
/new/dir:

А : сам по себе добавляет текущий каталог к $PATH. Использование PATH="/new/dir${PATH:+:$PATH}" позволяет избежать этого. Конечно, вы можете использовать PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin", если хотите, или вы можете использовать PATH="$PATH:/usr/local/bin:/usr/bin", если предпочитаете. Единственное различие заключается в том, что в первом случае может добавиться дополнительный :, тем самым добавляя ваш текущий каталог в $PATH.

47
27.01.2020, 19:40

Теги

Похожие вопросы