Discussion:
[shell-script] Arquivo em formato de parâmetro
Sandro Gambini sandrojapa@gmail.com [shell-script]
2018-08-14 18:44:18 UTC
Permalink
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 Peczenyj tiago.peczenyj@gmail.com [shell-script]
2018-08-14 21:07:56 UTC
Permalink
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
Post by Sandro Gambini ***@gmail.com [shell-script]
Boa tarde a todos!
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
Sandro Gambini sandrojapa@gmail.com [shell-script]
2018-08-16 19:34:19 UTC
Permalink
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

[***@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.:

[***@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
[***@servsage1 simul]$ ./programa.sh $(google.com.br) teste
bash: google.com.br: Comando não encontrado...
Falta parâmetro
[***@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
Post by Tiago Peczenyj ***@gmail.com [shell-script]
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
Post by Sandro Gambini ***@gmail.com [shell-script]
Boa tarde a todos!
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 Peczenyj tiago.peczenyj@gmail.com [shell-script]
2018-08-16 19:44:09 UTC
Permalink
Tente assim :

script.sh <( echo “foo” )
Post by Sandro Gambini ***@gmail.com [shell-script]
Boa tarde Tiago,
não funcionou.
Para testar o conceito fiz um script que lê um arquivo com algumas URL's e
#!/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
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
<https://maps.google.com/?q=29.163&entry=gmail&source=g>) 56(84) bytes of
data.
64 bytes from gru10s02-in-f163.1e100.net (172.217.29.163
<https://maps.google.com/?q=29.163&entry=gmail&source=g>): 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?
<http://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
bash: google.com.br: Comando não encontrado...
Falta parâmetro
bash: google.com.br <http://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
Post by Tiago Peczenyj ***@gmail.com [shell-script]
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
Post by Sandro Gambini ***@gmail.com [shell-script]
Boa tarde a todos!
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
Werneck Costa werneck.costa@gmail.com [shell-script]
2018-08-16 20:17:51 UTC
Permalink
Boa tarde.
Sandro, se eu te entendi, vc gostaria de passar vários parâmetros, mas
continuar utilizando um deles com uma espécie de tag.
Tente o seguinte:

#!/bin/bash
Param1=$1
Param2=$2

for ip in $(echo $Param1|sed 's/,/\n/g')
do
echo $ip
done
echo $Param2

Você precisa passar os IPs separados por vírgula. Dessa forma, pode passar
uma lista com quantos precisar.

- - -
*Werneck Costa*

Analista de Suporte
Post by Tiago Peczenyj ***@gmail.com [shell-script]
script.sh <( echo “foo” )
Post by Sandro Gambini ***@gmail.com [shell-script]
Boa tarde Tiago,
não funcionou.
Para testar o conceito fiz um script que lê um arquivo com algumas URL's
#!/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
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
<https://maps.google.com/?q=29.163&entry=gmail&source=g>) 56(84) bytes
of data.
64 bytes from gru10s02-in-f163.1e100.net (172.217.29.163
<https://maps.google.com/?q=29.163&entry=gmail&source=g>): 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?
<http://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
bash: google.com.br: Comando não encontrado...
Falta parâmetro
bash: google.com.br <http://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
Post by Tiago Peczenyj ***@gmail.com [shell-script]
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
Post by Sandro Gambini ***@gmail.com [shell-script]
Boa tarde a todos!
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
'Julio C. Neves' julio.neves@gmail.com [shell-script]
2018-08-16 19:51:39 UTC
Permalink
Suponha que teu prg recebeu os seguintes parametros:
192.168.88.1 google.com.br uol.com.br ubuntu.com teste

Vc pode fazer algo como:
$ DolarUm=($(cut -f-$(($#-1)) -d' ' <<< $*))
$ echo ${DolarUm[@]}
192.168.88.1 google.com.br uol.com.br ubuntu.com
$ 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: *
* http://www.dicas-l.com.br/cursos/educacao
<http://www.dicas-l.com.br/cursos/educacao>*
*» Treinamento presencial (em 4 sábados) no RJ e BSB *
* em http://bit.ly/cursoshelljulioneves
<http://bit.ly/cursoshelljulioneves> *



*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
Post by Sandro Gambini ***@gmail.com [shell-script]
Boa tarde Tiago,
não funcionou.
Para testar o conceito fiz um script que lê um arquivo com algumas URL's e
#!/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
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?
<http://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
bash: google.com.br: Comando não encontrado...
Falta parâmetro
bash: google.com.br <http://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
Post by Tiago Peczenyj ***@gmail.com [shell-script]
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
Post by Sandro Gambini ***@gmail.com [shell-script]
Boa tarde a todos!
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
Sandro Gambini sandrojapa@gmail.com [shell-script]
2018-08-17 01:49:53 UTC
Permalink
Tiago,

não funciona:

[***@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
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
192.168.88.1 google.com.br uol.com.br ubuntu.com teste
$ DolarUm=($(cut -f-$(($#-1)) -d' ' <<< $*))
192.168.88.1 google.com.br uol.com.br ubuntu.com
$ 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: *
* http://www.dicas-l.com.br/cursos/educacao
<http://www.dicas-l.com.br/cursos/educacao>*
*» Treinamento presencial (em 4 sábados) no RJ e BSB *
* em http://bit.ly/cursoshelljulioneves
<http://bit.ly/cursoshelljulioneves> *
*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
Post by Sandro Gambini ***@gmail.com [shell-script]
Boa tarde Tiago,
não funcionou.
Para testar o conceito fiz um script que lê um arquivo com algumas URL's
#!/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
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 <http://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?
<http://google.com.br>) teste
cat: google.com.br <http://google..com.br>: Arquivo ou diretório não
encontrado
cat: google.com.br: Arquivo ou diretório não encontrado
teste
bash: google.com.br: Comando não encontrado...
Falta parâmetro
bash: google..com.br <http://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
Post by Tiago Peczenyj ***@gmail.com [shell-script]
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
Post by Sandro Gambini ***@gmail.com [shell-script]
Boa tarde a todos!
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 Peczenyj tiago.peczenyj@gmail.com [shell-script]
2018-08-17 05:57:45 UTC
Permalink
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
Post by Sandro Gambini ***@gmail.com [shell-script]
Tiago,
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
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
192.168.88.1 google.com.br uol.com.br ubuntu.com teste
$ DolarUm=($(cut -f-$(($#-1)) -d' ' <<< $*))
192.168.88.1 google.com.br uol.com.br ubuntu.com
$ 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: *
* http://www.dicas-l.com.br/cursos/educacao
<http://www.dicas-l.com.br/cursos/educacao>*
*» Treinamento presencial (em 4 sábados) no RJ e BSB *
* em http://bit.ly/cursoshelljulioneves
<http://bit.ly/cursoshelljulioneves> *
*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
Post by Sandro Gambini ***@gmail.com [shell-script]
Boa tarde Tiago,
não funcionou.
Para testar o conceito fiz um script que lê um arquivo com algumas URL's
#!/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
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
<https://maps.google.com/?q=29.163&entry=gmail&source=g>) 56(84) bytes
of data.
64 bytes from gru10s02-in-f163.1e100.net (172.217.29.163
<https://maps.google.com/?q=29.163&entry=gmail&source=g>): 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 <http://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?
<http://google.com.br>) teste
cat: google.com.br <http://google..com.br>: Arquivo ou diretório não
encontrado
cat: google.com.br: Arquivo ou diretório não encontrado
teste
bash: google.com.br: Comando não encontrado...
Falta parâmetro
bash: google...com.br <http://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
Post by Tiago Peczenyj ***@gmail.com [shell-script]
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
Post by Sandro Gambini ***@gmail.com [shell-script]
Boa tarde a todos!
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
Sandro Gambini sandrojapa@gmail.com [shell-script]
2018-08-17 12:53:43 UTC
Permalink
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
Post by Tiago Peczenyj ***@gmail.com [shell-script]
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
Post by Sandro Gambini ***@gmail.com [shell-script]
Tiago,
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'
Post by 'Julio C. Neves' ***@gmail.com [shell-script]
192.168.88.1 google.com.br uol.com.br ubuntu.com teste
$ DolarUm=($(cut -f-$(($#-1)) -d' ' <<< $*))
192.168.88.1 google.com.br uol.com.br ubuntu.com
$ 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: *
* http://www.dicas-l.com.br/cursos/educacao
<http://www.dicas-l.com.br/cursos/educacao>*
*» Treinamento presencial (em 4 sábados) no RJ e BSB *
* em http://bit.ly/cursoshelljulioneves
<http://bit.ly/cursoshelljulioneves> *
*Também damos treinamento em sua empresa*
*em qualquer cidade**, **com certificado **e nota fiscal.*
Post by Sandro Gambini ***@gmail.com [shell-script]
Boa tarde Tiago,
não funcionou.
Para testar o conceito fiz um script que lê um arquivo com algumas
#!/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
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
<https://maps.google.com/?q=29.163&entry=gmail&source=g>) 56(84) bytes
of data.
64 bytes from gru10s02-in-f163.1e100.net (172.217.29.163
<https://maps.google.com/?q=29.163&entry=gmail&source=g>): 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 <http://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?
<http://google.com.br>) teste
cat: google.com.br <http://google..com.br>: Arquivo ou diretório não
encontrado
cat: google.com.br: Arquivo ou diretório não encontrado
teste
bash: google.com.br: Comando não encontrado...
Falta parâmetro
bash: google...com.br <http://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
Post by Tiago Peczenyj ***@gmail.com [shell-script]
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
Post by Sandro Gambini ***@gmail.com [shell-script]
Boa tarde a todos!
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
itamarnet@yahoo.com.br [shell-script]
2018-08-17 12:08:11 UTC
Permalink
Caro Sandro


Não sei se entendi exatamente o que deseja, visto as dicas já encaminhadas pelo mestre Julio e pelo grande Tiago.


Mas não seria apenas o caso de proteger o primeiro parâmentro com aspas?


Para exemplificar, suponha um arquivo "teste.txt" como o conteúdo:
a
b
c


E um shell script programa.sh:
#!/bin/bash
echo "$1"
echo "$2"


Se chamar:
./programa.sh $(cat teste.txt) zzzz


Irá exibir apenas: a b


Mas se chamar:
./programa.sh "$(cat teste.txt)" zzzz


Irá exibir:
a
b
c
zzzz




Nesse caso poderia colocar o conteúdo do arquivo entre aspas, como:


./programa.sh "a
b
c" zzzz


Que irá exibir:
a
b
c
zzzz



Acredito ser isso que deseja.


[]'s
Itamar
Loading...