'Julio C. Neves' julio.neves@gmail.com [shell-script]
2017-03-24 15:25:10 UTC
Fala pessoal,
eu pegava os dados que recebia da entrada primária (via | ou <) da seguinte
maneira:
Parms=$(cat -)
set $Parms
echo $1:$2:$3
Experimente colocar essas 3 linhas dentro de leprimaria.sh e executá-lo da
seguinte maneira:
echo A B C | leprimaria.sh
Viu, funcionou beleza! Porém se vc não passar nenhum parâmetro ele trava,
pois fica tentando ler a entrada primária, onde não tem nada.
Demorei anos para consertar isso, pq não me ocorreu de usar a opção -t do
cmd test que testa se um arquivo com um determinado descritor (FD - file
descriptor) está aberto. Aà ficou fácil e fiz um bacalho para mostrar para
vcs, aproveitando para apresentar para muitos o utilitário xclip. Só para
vc ter uma ideia o Shell trabalha com 3 áreas de transferências (pesquisem)
mas o meu bacalho usa somente o clipboard (que vc verá no código onde
escrevo xclip -selection c, mas que poderia ser ser p ou s).
Abaixo o código:
==================================================
#!/bin/bash
# Este programa lê dados de um arquivo ou da entrada
#+ primária e os carrega para a área de transferência
if ! [[ -t 0 ]] # Testa se o file descriptor 0 (entrada
#+ primária) está aberto no terminal
then
echo -n "$(< /dev/stdin)" |
xclip -selection c && \
echo "Copiado para a área de transferência"
else
if [[ -z "$@" ]] # Se não recebeu nenhum parâmetro
then
echo " Uso:
$0 <ARQUIVO> - Copia ARQUIVO p/ área de transferência
Exemplo: $0 /caminho/do/arquivo
COMANDO | $0 - Copia saÃda de COMANDO p/ área de transf.
Exemplo: echo A B C | $0
Um <CTRL>+V exibirá o conteúdo copiado"
exit 1
fi
# Então parâmetro passado foi um arquivo.
if [[ ! -f "$@" ]]
then
echo Arquivo $@ não existe
exit 1
else
xclip -i -selection clipboard "$@"
echo " Arquivo "$@" copiado para área de transf."
fi
fi
==================================================
Se descobrirem algum furo, p. favor, avisem.
Abcs,
Julio
ââ
*âDamos treinamento em sua empresa por *
*um preço, no mÃnimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*
ââ
Nosso time de instrutores *in company* é formado somente por
â
â
autores
â â
â
de
*Best Sellersâ â*âlaureados âsobre os temas. P. exemplo:
Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico
eu pegava os dados que recebia da entrada primária (via | ou <) da seguinte
maneira:
Parms=$(cat -)
set $Parms
echo $1:$2:$3
Experimente colocar essas 3 linhas dentro de leprimaria.sh e executá-lo da
seguinte maneira:
echo A B C | leprimaria.sh
Viu, funcionou beleza! Porém se vc não passar nenhum parâmetro ele trava,
pois fica tentando ler a entrada primária, onde não tem nada.
Demorei anos para consertar isso, pq não me ocorreu de usar a opção -t do
cmd test que testa se um arquivo com um determinado descritor (FD - file
descriptor) está aberto. Aà ficou fácil e fiz um bacalho para mostrar para
vcs, aproveitando para apresentar para muitos o utilitário xclip. Só para
vc ter uma ideia o Shell trabalha com 3 áreas de transferências (pesquisem)
mas o meu bacalho usa somente o clipboard (que vc verá no código onde
escrevo xclip -selection c, mas que poderia ser ser p ou s).
Abaixo o código:
==================================================
#!/bin/bash
# Este programa lê dados de um arquivo ou da entrada
#+ primária e os carrega para a área de transferência
if ! [[ -t 0 ]] # Testa se o file descriptor 0 (entrada
#+ primária) está aberto no terminal
then
echo -n "$(< /dev/stdin)" |
xclip -selection c && \
echo "Copiado para a área de transferência"
else
if [[ -z "$@" ]] # Se não recebeu nenhum parâmetro
then
echo " Uso:
$0 <ARQUIVO> - Copia ARQUIVO p/ área de transferência
Exemplo: $0 /caminho/do/arquivo
COMANDO | $0 - Copia saÃda de COMANDO p/ área de transf.
Exemplo: echo A B C | $0
Um <CTRL>+V exibirá o conteúdo copiado"
exit 1
fi
# Então parâmetro passado foi um arquivo.
if [[ ! -f "$@" ]]
then
echo Arquivo $@ não existe
exit 1
else
xclip -i -selection clipboard "$@"
echo " Arquivo "$@" copiado para área de transf."
fi
fi
==================================================
Se descobrirem algum furo, p. favor, avisem.
Abcs,
Julio
ââ
*âDamos treinamento em sua empresa por *
*um preço, no mÃnimo, 50% mais barato que qualquer curso,*
*com certificado e nota fiscal.*
ââ
Nosso time de instrutores *in company* é formado somente por
â
â
autores
â â
â
de
*Best Sellersâ â*âlaureados âsobre os temas. P. exemplo:
Shell básico e Programação em Shell Julio Neves
Bacula Heitor Medrado
Zabbix Adail Host
Produção Gráfica e Videografismo Cadunico