shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Arquivo em formato de parâmetro


From: Sandro Gambini
Subject: Re: [shell-script] Arquivo em formato de parâmetro
Date: Fri, 17 Aug 2018 09:53:43 -0300

Tiago,

é isso mesmo, através do named pipe funcionou, porém só dá para utilizar uma vez, como vc explicou. Ao retirar, do script o primeiro cat, o ping funcionou.

Como esse programa.sh é só um exemplo conceitual do que preciso, pode ser que, com o programa original funcione, desde que utilize o conteúdo, que seria de uma arquivo, apenas uma vez. Vou testar e estudar um pouco de "named pipe" também.

Muito Obrigado.


Atenciosamente,

Sandro Gambini
sandrojapa<at>gmail.com
(11) 97464-3384



Em sex, 17 de ago de 2018 às 02:58, Tiago Peczenyj address@hidden [shell-script] <address@hidden> escreveu:
 

Ola

O problema é que vc lê o conteudo de $1 duas vezes

A forma <( comando ) cria um named pipe, que é uma forma de sincronizar dois processos: o comando só vai escrever se o script estiver lendo. Depois que ler, não há mais nada para ser lido.

Ou vc eliminar o primeiro cat $1, ou vc cria um arquivo temporário com o conteúdo que vc quer para ler múltiplas vezes 

Em sex, 17/08/2018 às 03:52, Sandro Gambini address@hidden [shell-script] <address@hidden> escreveu:
 

Tiago,

não funciona:

[sagetr1@servsage1 simul]$ ./programa.sh <(echo google.com.br) teste
google.com.br
teste


@Julio,

O que eu preciso é "enganar' um programa, que não posso alterar, e espera receber como primeiro parâmetro, um arquivo.

Fiz esse script, que também espera receber um arquivo em $1, para tentar simular o que preciso, que é enviar um conteúdo no parâmetro $1, em vez do arquivo que teria esse conteúdo. Não sei se fui claro.


Atenciosamente,

Sandro Gambini
sandrojapa<at>gmail.com
(11) 97464-3384



Em qui, 16 de ago de 2018 às 17:06, 'Julio C. Neves' address@hidden [shell-script] <address@hidden> escreveu:

 

Suponha que teu prg recebeu os seguintes parametros:

Vc pode fazer algo como:
$ DolarUm=($(cut -f-$(($#-1)) -d' ' <<< $*))
$ echo ${DolarUm[@]}
$ DolarDois=${!#}
$ echo $DolarDois
teste

Como vc pode ver as URL foram para o vetor DolarUm e o teu último parâmetro foi para a variável DolarDois. É isso que vc queria?

Abraços,
Julio

» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
» Conheça nosso portal educacional e estude conosco: 
»  Treinamento presencial (em 4 sábados) no RJ e BSB 
    em http://bit.ly/cursoshelljulioneves                   



Também damos treinamento em sua empresa
em qualquer cidadecom certificado e nota fiscal.



Em qui, 16 de ago de 2018 às 16:34, Sandro Gambini address@hidden [shell-script] <address@hidden> escreveu:

 

Boa tarde Tiago,

não funcionou.

Para testar o conceito fiz um script que lê um arquivo com algumas URL's e faz um ping em cada endereço, depois imprime o parâmetro 2:

#!/bin/bash

if [ $# -lt 2 ]; then
    echo "Falta parâmetro"
    exit 1
fi

cat $1
for x in `cat $1`; do
    ping -c1 $x
done
echo $2

[sagetr1@servsage1 simul]$ ./programa.sh ips teste
192.168.88.1
google.com.br
uol.com.br
ubuntu.com
PING 192.168.88.1 (192.168.88.1) 56(84) bytes of data.
64 bytes from 192.168.88.1: icmp_seq=1 ttl=64 time=11.0 ms

--- 192.168..88.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 11.078/11.078/11.078/0.000 ms
PING google.com.br (172.217.29.163) 56(84) bytes of data.
64 bytes from gru10s02-in-f163.1e100.net (172.217.29.163): icmp_seq=1 ttl=50 time=15.0 ms

--- google.com.br ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 15.089/15.089/15.089/0.000 ms
PING uol.com.br (200.221..2.45) 56(84) bytes of data.
64 bytes from home.uol.com.br (200.221.2.45): icmp_seq=1 ttl=244 time=22.0 ms

--- uol.com.br ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 22.068/22.068/22.068/0.000 ms

PING ubuntu.com (91.189.94.40) 56(84) bytes of data..
64 bytes from ovinnik.canonical.com (91.189.94.40): icmp_seq=1 ttl=52 time=198 ms

--- ubuntu.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 198.223/198.223/198.223/0.000 ms
teste

Ele fez o cat do arquivo ips, fez os pings e imprimiu $2 que é a palavra teste!

O que eu preciso, é de alguma forma, chamar esse script programa.sh e em vez de passar o parâmetro 1 que é o nome do arquivo(ips), passar alguns endereços para ele "pingar" e depois o segundo parâmetro, será possível?

Ex.:

[sagetr1@servsage1 simul]$ ./programa.sh $(echo google.com..br) teste
cat: google.com.br: Arquivo ou diretório não encontrado
cat: google.com.br: Arquivo ou diretório não encontrado
teste
[sagetr1@servsage1 simul]$ ./programa.sh $(google.com.br) teste
bash: google.com.br: Comando não encontrado...
Falta parâmetro
[sagetr1@servsage1 simul]$ ./programa.sh <(google.com.br) teste
bash: google...com.br: Comando não encontrado...
teste



Obrigado.

Atenciosamente,

Sandro Gambini
sandrojapa<at>gmail.com
(11) 97464-3384



Em qua, 15 de ago de 2018 às 03:03, Tiago Peczenyj address@hidden [shell-script] <address@hidden> escreveu:
 

Ola

Se o seu script que altera o arquivo escreve o conteudo alterado para a saida padrão , vc pode fazer isso

$ programa <( script ) parametro2

Vc também pode fazer com named pipes mas vai precisar executar 3 comandos 

Em ter, 14/08/2018 às 22:46, Sandro Gambini address@hidden [shell-script] <address@hidden> escreveu:
 

Boa tarde a todos!

Tenho uma dúvida que é a seguinte:

Tenho um programa que executa uma tarefa, através de um arquivo ascii com uma sintaxe própria. A minha necessidade seria executá-lo, mas ao invés de passar o arquivo, como parâmetro, para ele ler, gostaria de enviar o conteúdo do arquivo, através de um pipe por exemplo, mas não funciona. Um agravante é que o arquivo é o primeiro parâmetro e tem outro parâmetro obrigatório para passar após o primeiro.

Existe alguma forma de "enganar" o programa?

Sintaxe: programa <arquivo> <parâmetro2>

Algo tipo: programa $( <script que criaria o arquivo> ) <parâmetro2> 

Hoje faço um script que gera um arquivo temporário, executa o programa passando esse arquivo temporário por parâmetro, apago o arquivo temporário e finalizo o script, o que me parece não ser a melhor solução, a não ser que seja única.

Obrigado.


Atenciosamente,

Sandro Gambini
sandrojapa<at>gmail.com
(11) 97464-3384

--
Tiago B. Peczenyj

http://about.me/peczenyj

--
Tiago B. Peczenyj

http://about.me/peczenyj


reply via email to

[Prev in Thread] Current Thread [Next in Thread]