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

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

Dados de entrada


From: Julio C. Neves
Subject: Dados de entrada
Date: Fri, 24 Mar 2017 12:25:10 -0300

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


reply via email to

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