2015-04-28 8 views
0

в RHEL5, по умолчанию Ruby's Socket::gethostname возвращает короткое имя хоста без доменного имени. В RHEL6 он возвращает имя хоста , включая доменное имя.Ruby short Socket.gethostname в RHEL6

Это вызвано различной системой hostname функциональностью в RHEL6, которая может быть исправлена ​​в сценариях SH с использованием hostname -s. Есть ли параметр Socket::gethostname, чтобы исправить его в Ruby?

Можно исправить путем анализа вывода с использованием регулярного выражения или с помощью системного вызова, например. 'hostname -s'.strip, но ни одно из них не является простым и приятным решением.

Не могли бы вы помочь?

Благодаря Jan

ответ

0

Как вы могли видеть в rubydoc + щелчок для переключения-источника, gethostname является просто оболочкой для c stdlib.

Таким образом, вы можете попытаться скомпилировать и выполнить приведенный ниже код. Как только он вернется не так, как вы хотите, вы, вероятно, застряли до hostname -s.

#include <unistd.h> 
#include <stdio.h> 

int main(int, char **) { 
    char buf[1025]; 
    gethostname(buf, 1024); 

    printf("%s\n", buf); 
} 
+0

Благодарим за подробную информацию. Я довольно новичок в Ruby (обновление кода других) и еще не нашел исходников. Решение не из самых быстрых, но поскольку оно не выполняется тысячи раз, оно не должно возражать. Это просто не методично. –

0

Вы можете использовать регулярное выражение, чтобы вернуть все до первого '.'

require 'socket' 
hostname = Socket.gethostname[/^[^.]+/]