В чем смысл следующего кода?

Кто-нибудь может объяснить, что означает эта команда?

PATH="${GZIP_BINDIR-'/bin'}:$PATH"; export PATH
13
задан 27 May 2015 в 14:47

3 ответа

${GZIP_BINDIR-'/bin'} bash шаблон расширения параметра. От man bash:

${parameter:-word}
              Use Default Values.  If parameter is unset or null, 
the expansion of word is substituted.  Otherwise, the  value  of parameter
is substituted.

Сразу до этой страницы справочника части имеет (благодаря @jwodder для уведомления):

Omitting the colon results in a test only for a parameter that is unset.

, Поскольку в странице справочника говорится, она установит значение по умолчанию переменной GZIP_BINDIR. Если GZIP_BINDIR будет иметь значение ранее набор (кроме пустого указателя, поскольку Вы не используете :), тогда, что значение будет использоваться, то иначе /bin будет использоваться в качестве значения переменной GZIP_BINDIR.

, С другой стороны, если Вы хотите протестировать на нулевые значения также, используйте этот шаблон (включайте :):

${GZIP_BINDIR:-'/bin'}

После этого эти $PATH будет расширен до значений, которые это содержало прежде. Так, если PATH ранее имел:

/usr/sbin:/usr/bin

Теперь Ваш PATH будет (рассмотрение GZIP_BINDIR не установлено):

/bin:/usr/sbin:/usr/bin

export PATH сделает это PATH доступным всем дочерним процессам.

0
ответ дан 27 May 2015 в 14:47

Нет ли действительно никакое двоеточие перед дефисом в расширении параметра ${GZIP_BINDIR-'/bin'}?

Этот вид конструкции почти всегда пишется с двоеточием, как в ${GZIP_BINDIR:-'/bin'}, что означает, "если $GZIP_BINDIR является ПУСТЫМ или сброс, установите его на '/bin'"

Однако синтаксис, который Вы предоставили , допустимы, но редки. ${GZIP_BINDIR-'/bin'} (никакое двоеточие) средства, "если $GZIP_BINDIR сброшен, устанавливают его на '/bin'". Если это установлено (был объявлен), но ничто присвоенное ему (например, это является ПУСТЫМ), ничто не будет вставлено.

может быть ошибка здесь хотя как двоеточие после переменная конструкция (...} : $PATH...) будет все еще быть вставленным, если $GZIP_BINDIR будет установлен, но ПУСТОЙ УКАЗАТЕЛЬ. Так как это добавило бы двоеточие в начале $PATH, это заставит текущий каталог искаться сначала.

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

Для оставления $PATH без изменений, если бы $GZIP_BINDIR установлен, но (пустой) ПУСТОЙ УКАЗАТЕЛЬ, правильный синтаксис был бы ${GZIP_BINDIR-'/bin:'}$PATH; export PATH

Для оставления $PATH без изменений, если бы $GZIP_BINDIR или сброшен или установлен, но ПУСТОЙ УКАЗАТЕЛЬ, правильный синтаксис был бы ${GZIP_BINDIR:-'/bin:'}$PATH; export PATH

0
ответ дан 27 May 2015 в 14:47

Это обновление команды переменная ПУТИ.

Эти PATH переменная среды, определяющая ряд каталогов, где исполняемые программы расположены.

PATH="${GZIP_BINDIR-'/bin'}:$PATH";

Это добавляет значение другой переменной GZIP_BINDIR, если выход к предыдущему ПУТИ еще использует / мусорное ведро вместо этого и добавляет его для СОЕДИНЕНИЯ КАНАЛОМ

export PATH

, экспорт используется для устанавливания ПУТИ, доступного для всего Read дочерних процессов и подоболочек это для получения дополнительной информации [приблизительно 1 112]

, необходимо отметить, что это не статично, и Вы освободите его, как только Вы выходите из своей оболочки.

, Чтобы заставить этот ПУТЬ отредактировать постоянный, необходимо добавить эти строки к Вашему .bashrc

gedit .bashrc

и добавить, что строка

export PATH="${GZIP_BINDIR-'/bin'}:$PATH"

тогда выполняет команду

source .bashrc
0
ответ дан 27 May 2015 в 14:47

Другие вопросы по тегам:

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