precisa de ajuda para criar uma instrução if que funcione para o meu propósito em .bashrc

5

Eu editei meu .bashrc para ficar assim com alguma ajuda de outros neste fórum ... Obrigado pessoal pela ajuda no segmento meteorológico deste script ...

Um problema que encontrei é o código do endereço IP externo. Se por algum motivo o site que eu uso para checar o IP externo não responde ... ele bloqueia meu bash naquele ponto até que ele receba as informações.

O que eu gostaria de fazer é mudá-lo para que eu possa tê-lo, se ele não responder em um segundo ou 500ms ... então, basta seguir em frente para que ele não seja interrompido. Espero que faça sentido .. aqui é o código que estou usando para isso.

localnet()
{
declare -a INETARRAY
INETARRAY=( '/sbin/ifconfig | awk /'inet addr/ {print }' && /sbin/ifconfig | awk /'Bcast/ {print }'')
echo -ne ${INETARRAY[@]} "ExtIP:" ; myip
}
myip ()
{
lynx -dump -hiddenlinks=ignore -nolist http://checkip.dyndns.org:8245/ | grep "Current IP Address" | cut -d":" -f2 | cut -d" " -f2
}

Basicamente eu preciso de uma declaração if que faria algo assim:

se o site não der o esperado em uma quantidade configurável de tempo, carregar "linha 1" ou carregar "linha 2"

A linha 1 conteria o código sem a solicitação de IP externo A linha 2 conteria o código com o pedido de IP externo.

Agora, não sei ao certo o que está causando o problema. Não sei se o site não está respondendo .. ou se está ocupado e demorando mais para responder ou se está recebendo informações, mas não o que está acontecendo. esperado ... isso acontece esporadicamente e se ele trava em mim eu posso fechar o shell e abri-lo e normalmente ele vai pegar a informação .. Eu pensei em ping mas ... de novo .. não tenho certeza se o site ainda responderia o ping, mas não produz o que o script está procurando e ainda está pendurado.

Eu simplesmente não sei como configurar a declaração corretamente para que isso aconteça ou algo semelhante

Obrigado em adiantado.

Eu tentei a linha sugerida por glenn jackman

curl --silent --output - --connect-timeout 2 --max-time 3 http://checkip.dyndns.org:8245/ | grep "Current IP Address" | cut -d":" -f2 | cut -d"" -f2

Ele obteve o endereço IP, mas o resultado foi o seguinte:

xxx.xxx.xxx.xxx</body></html>

Eu provavelmente terei que ajustar o segundo comando de corte .. lol .. acho que preciso aprender o corte: D

Se eu usar

curl --silent --output - --connect-timeout 2 --max-time 3 http://checkip.dyndns.org:8245/ | grep "Current IP Address"

Eu obtenho a saída de:

<html><head><title>Current IP Check</title></head><body>Current IP Address: xxx.xxx.xxx.xxx</body></html>

Se eu voltar para a linha de lince em vez de curl e usar o -read_timeout=1 -connect-timeout=1 , isso impede que o shell seja interrompido se tiver problemas de conexão, mas ... ele produz erros, motivo pelo qual eu esperava fazer algum tipo de declaração

Network: addr:192.168.1.20 addr:127.0.0.1 Bcast:192.168.1.255 ExtIP:
Looking up checkip.dyndns.org:8245
Making HTTP connection to checkip.dyndns.org:8245
Alert!: Connection failed (too many retries).
Alert!: Unable to connect to remote host.

lynx: Can't access startfile http://checkip.dyndns.org:8245/
    
por John Orion 07.05.2016 / 00:00

1 resposta

3

O que parece ser uma solução funcional é usar o comando curl sugerido por glenn jackman e o endereço sugerido por Terrance. Eu não corri para o jeito ainda, então eu não sei se será através de algum erro, mas parece funcionar bem .. a nova linha é agora

curl --silent --output - --connect-timeout 1 --max-time 2 http://icanhazip.com/ 

que parece estar funcionando .. Eu lancei o terminal 10 vezes sem travar ou com um erro. Eu acho que vocês fizeram isso de novo ... Cara, eu queria que fosse algo parecido com este fórum para Windows ... você rola em seus fóruns e faz uma pergunta .. você recebe uma resposta de carta de formulário não relacionada e, em seguida, nada.

Vocês são ótimos .. Eu acho que isso agora tem o shell terminal do jeito que eu quero e não pendurado .. lol Eu desativei o IP externo por um tempo por causa do aborrecimento, mas agora eu posso tê-lo de volta novamente: D

Se alguém decidir usar o .bashrc eu vinculei lol é um pouco plagiado mas não me lembro da pessoa original Consegui desde quando o script começou, mas eu tenho jogado com ele desde então ... era como em 2010 ou algo assim.

O arquivo também inclui um link para .bashrcc que você pode criar onde você pode adicionar comandos e aliases sem precisar colocá-los no arquivo principal. Isso foi feito porque eu sincronizo meu bashrc com vários computadores e há momentos em que eu quero um alias especial para um computador, mas não o disponibilizo em todos os PCs que estão sincronizados com o arquivo. O .bashrcc me permitirá adicioná-lo apenas para um usuário. Lembre-se também que você terá que alterar a função weather com seu CEP ou você estará vendo os tempos da minha área: D

    
por John Orion 07.05.2016 / 01:46