关于在rabbitmq的bash脚本中使用HOSTNAME

时间:2012-05-27 00:46:09

标签: bash erlang rabbitmq

在“rabbitmq-env”的rabbitmq脚本文件中,有以下行。

[ "x" = "x$HOSTNAME" ] && HOSTNAME=`env hostname`
NODENAME=rabbit@${HOSTNAME%%.*}

第一行的含义是什么?是否设置$HOSTNAME是否设置,如果未设置,设置为'env hostname'

第一行的编程模式占据了另一个相关脚本文件"rabbitmq-server"的大部分。所以我想知道这条线的明确含义。

对于第二行,HOSTNAME%%.*的含义是什么?

1 个答案:

答案 0 :(得分:6)

此表达式检查HOSTNAME是否未设置:

[ "x" = "x$HOSTNAME" ]

如果未设置HOSTNAME,则最终会显示如下:

[ "x" = "x" ]

当然评估为true。表达式:

[ "x" = "x$HOSTNAME" ] && HOSTNAME=`env hostname`

如果HOSTNAME之前的表达式为env hostname,则会将&&设置为true的输出。调用env hostname与仅调用hostname完全相同,后者只输出本地主机的名称。

第二个表达:

NODENAME=rabbit@${HOSTNAME%%.*}

使用bash变量扩展除去主机名的第一个组件之外的所有内容。给定HOSTNAME="host.example.com"${HOSTNAME%%.*}返回host。您可以在bash手册页中阅读更多内容:

${parameter%%word}
  Remove matching suffix pattern.  The word is expanded to produce
  a pattern just as in pathname expansion.  If the pattern matches
  a trailing portion  of  the expanded value of parameter, then
  the result of the expansion is the expanded value of parameter
  with the shortest matching pattern (the ``%'' case) or the longest 
  matching pattern (the ``%%'' case) deleted.

因此,假设您的本地主机名为NODENAME,这会将rabbit@host设置为host.example.com