Se você não está limitado apenas às ferramentas do bash, talvez tente
SHORT_HOST=$(hostname | sed -e 's/\..*//')
ou
SHORT_HOST=$(hostname | cut -d. -f1)
bash# hostname
host1.example.com
Eu só quero host1. Então:
SHORT_HOST=$(/bin/hostname)
SHORT_HOST=${SHORT_HOST%%.*}
Posso transformar isso em um forro único? - ou - Qual é a melhor maneira de tornar $ SHORT_HOST readonly, mas ainda assim obter o hostname curto?
Se você não está limitado apenas às ferramentas do bash, talvez tente
SHORT_HOST=$(hostname | sed -e 's/\..*//')
ou
SHORT_HOST=$(hostname | cut -d. -f1)
Se o seu ambiente suportar isso, você poderia simplesmente:
typeset -r SHORT_HOST="$(/bin/hostname -s)"
Esta é apenas outra maneira de usar o comando awk
:
/bin/hostname | awk -F'.' '{print $1}'
e se você precisar armazená-lo em uma variável SHORT_HOST, use o seguinte:
SHORT_HOST=$(/bin/hostname | awk -F'.' '{print $1}')
Em shells que não sejam zsh, você precisa executar uma atribuição intermediária sempre que desejar executar várias transformações em um valor.
Claro, às vezes existem soluções alternativas, como executando um comando que produz o resultado desejado sem nenhum pós-processamento ou fazendo o pós-processamento através de um pipe através de uma ferramenta externa (a solução de pipe será mais lenta e corre mais risco de manchar novas linhas).
Se você quiser tornar a variável somente leitura, talvez seja mais fácil atribuir a uma variável temporária.
tmp=$(/bin/hostname)
typeset -r SHORT_HOST="${tmp%%.*}"
Zsh (mas não o ksh ou o bash) suporta substituições de parâmetros aninhados. Lá você pode escrever
typeset -r SHORT_HOST=${$(/bin/hostname)%%.*}
Tags bash command-substitution