Se vazio resultado do comando, faça o comando alternativo (no comando de uma linha)

0

Estou tentando adicionar ao arquivo hosts um determinado IP. Esse IP pode ser recuperado com 2 comandos diferentes, mas o melhor nem sempre é retornado.

Estou tentando escrever um único comando que verifica o primeiro comando e, se ele retornar um IP, adicione a linha ao arquivo, caso contrário, use o segundo comando.

Comando de prioridade:

docker network inspect bridge | grep Gateway | grep -o -E '[0-9\.]+'

Comando alternativo:

ifconfig docker | grep -oP 'inet:\K[^ ]+'

Eu tentei escrever um comando if-else usando -eq '' ou -ne 0 , mas não consigo fazer isso funcionar quando tento usá-lo como um parâmetro para adicionar a linha no arquivo hosts.

Pode ser algo assim (mas no comando shell de uma linha):

if [ docker network inspect bridge | grep Gateway | grep -o -E '[0-9\.]+' -ne 0 ] ;
  then sudo echo $(docker network inspect bridge | grep Gateway | grep -o -E '[0-9\.]+') "symfony.dev" >> /etc/hosts;
  else sudo echo $(ifconfig docker0 | awk '/inet:/{ print substr($2,6); exit }') "symfony.dev" >> /etc/hosts;
fi
    
por CarlosAS 24.10.2017 / 17:24

1 resposta

1

A saída coletada de uma instrução if pode ser redirecionada ou canalizada como com qualquer outro comando.

if ! docker network inspect bridge | grep Gateway | grep -o -E '[0-9\.]+'; then
    ifconfig docker | grep -oP 'inet:\K[^ ]+'
fi | sudo tee -a /etc/hosts > /dev/null

A única parte disso que requer permissão de root está abrindo /etc/hosts para gravação, então substituí o redirecionamento de saída por sudo tee .

    
por 24.10.2017 / 18:39