Echo uma palavra específica no bash

0

Basicamente, eu tenho um monte de comandos no bash que estão pedindo a minha máquina as informações.

Como:

> host=$(hostname -A) 
hostname=$(hostname -I) 
Pub_IP=$(dig +short
myip.opendns.com @resolver1.opendns.com) 
Kernel_Version=$(uname -v | awk -F"Debian" '{print $2}' | cut -d ' ' -f2 | cut -d '-' -f1)
Deb_Version=$(cat /etc/debian_version)

Eu também estou ecoando

echo $host $hostname  $Pub_IP  $Kernel_Version $Deb_Version > info.txt

O que eu preciso descobrir é como eu posso colocar | entre cada parâmetro. Então, se eu olhar no meu arquivo info.txt, seria algo parecido com

 | debianmachine | output_of_hostname | output_of_Pub_IP |

Além disso, posso fazer isso com impressão?

    
por TheSebM8 22.03.2018 / 09:10

3 respostas

2

Se você citar ou escapar de suas strings, você pode incluir os canais:

echo "| ${host} | ${hostname} ..."

É claro que você pode usar printf (acho que é isso que você está perguntando no final da pergunta):

printf '| %s | %s | %s ...' "${host}" "${hostname}" "${Pub_IP}" ...

Você pode aproveitar o comportamento repetitivo de printf para simplificar a string de formatação:

printf '| %s ' "${host}" "${hostname}" "${Pub_IP}" ...; printf '|\n'

Isso repetirá a sequência | %s quantas vezes forem necessárias e terminará a linha com um retorno de tubo e carro.

    
por 22.03.2018 / 09:14
1

Use printf :

printf '| %s | %s | %s | %s | %s |\n' "$host" "$hostname" "$Pub_IP" "$Kernel_Version" "$Deb_Version" >info.txt

O %s na string de formato printf (o primeiro argumento para printf ) são marcadores de string e cada um deles será substituído pelos outros argumentos dados a printf por vez.

    
por 22.03.2018 / 09:14
0

Uma ideia é colocar todas as variáveis em um array e imprimi-las com as modificações desejadas pelo loop.

Penso que mais memória eficiente pode ser uma concatenação simples de cadeias de caracteres, como esta:

echo "| $host | $hostname | $Pub_IP | $Kernel_Version | $Deb_Version |" > info.txt

Uma outra maneira é usar o comando awk para editar o conteúdo do arquivo, por exemplo:

awk '{print "|"\
 for (i=1 ; i <= NF ; i++)\
 print " ", $i, " |"}'\
info.txt | xargs -11 > info.txt
    
por 22.03.2018 / 10:20

Tags