Acrescentando saída de função para uma função diferente no Bash

0

Estou trabalhando em um script para recuperar o número de série de um host executando o OS X e, em seguida, anexar o número ao final de um URL.

#!/bin/bash
# Retrieve serial number in OS X, then append serial number to URL

### Retrieve serial number ###

function serial_number(){
    local serialnum=$(system_profiler SPHardwareDataType | awk '/Serial/ {print $4}')
    # Use system_profiler to poll info, then print 4th column of Serial from SPHardwareDataType

    # write_header "Serial Number"
    echo "${serialnum}"
    echo ""
}

### Append serial number to URL ###

function apple_link(){
    local appleurl=$"https://support.apple.com/specs/${serialnum}"
    echo "${appleurl}"
    echo ""
}

### Testing ###
apple_link

Eu recebo isso como resultado: https://support.apple.com/specs/ , que não mostra o número de série anexado. Eu não tenho certeza porque isso é? Quaisquer comentários ou sugestões sobre como "consertar" minha supervisão seriam muito apreciados. Agradecemos antecipadamente.

    
por marshki 08.02.2017 / 16:38

1 resposta

1

Você tem uma função que gera um número de série e outra que gera um URL. Para combinar as duas saídas:

url="$(apple_link)$(serial_number)"

Ou na função apple_link :

local appleurl="https://support.apple.com/specs/$(serial_number)"

O $( ... ) será expandido para a saída do comando.

A única coisa a ser alterada é remover o echo "" .

Se você quiser fazer isso corretamente:

serial_number () {
  system_profiler SPHardwareDataType | awk '/Serial/ { print $4 }'
}

apple_link () {
  printf 'https://support.apple.com/specs/%s\n' "$( serial_number )"
}

Observe que não há necessidade de usar variáveis em lugar nenhum ou echo de nada. O printf está lá porque é uma alternativa mais segura para echo . Veja Por que o printf é melhor que o eco?

    
por 08.02.2017 / 17:23