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

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

[shell-script] Re: Zipando arquivo: KDE servicemenus + script + zip


From: opa
Subject: [shell-script] Re: Zipando arquivo: KDE servicemenus + script + zip
Date: Fri, 14 May 2004 10:12:27 -0300 hrN

Ou sua mensagem veio com problemas ou o IFS não está correto. Seu script só faz 
isso, não se preocupe em registrar o OIFS; esse IFS só vale nele.
IFS="
"
É assim mesmo, termina com aspas sózinha na segunda linha. Rode o script. E aí?
Não funcionou? Bem, então:

Devido às circunstâncias, acho que você deve dividir a solução do seu 
problema em duas partes, ao bom estilo JE citado ontem por um colega.

Primeiro, faça a sua linha:

zip -r $nome $(basename $infile) /dev/null 2>&1

ou como ficar depois de alterada, funcionar corretamente e, como você citou 
pouca experiência, sabendo como ela pode ou não funcionar. Experimente, 
ganhe firmeza antes de continuar. Isso você ensaia em um xterm.

Depois, você ataca a formação dessa linha, ou seja, o script proprimente dito. 
Considero que seria interessante você enviar a linha formada para um terminal 
ou um arquivo de log, para examinar com calma o que está chegando, afinal agora 
você já sabe o que pode/precisa chegar.

Acho que colocar algumas linhas extras pode ajudar nos testes.
===
Antes do "for":
date >>/tmp/zipsh.log
echo '$@='"$@" >>/tmp/zipsh.log

Alterar a linha dentro do for para, ou o que você definiu inicialmente (acima):
echo "zip -r $nome $(basename $infile) /dev/null 2>&1" >>/tmp/zipsh.log

Depois do for:
echo >>/tmp/zipsh.log
===

Ao chamar o script pode tentar em outro xterm:

tail -f /tmp/zipsh.log

acho que é isso, para monitorar permanentemente o que vai surgindo no arquivo. 
Procure começar com listas pequenas para facilitar a visualização do problema.

Dependendo do monitorzão que você usa, e/ou do tamanho das suas janelas, não 
vai 
nem precisar chavear entre janelas. Bem eu não lembro mais do KDE, se usasse 
até 
poderia contribuir de forma mais específica, mas imagino que possa trabalhar 
fácil e confortavelmente assim.

Se a coisa continuar complicada pode tentar um:
grep "seu arquivo problema" /tmp/zipsh.log|od -b
só para ver o que está separando os arquivos/diretórios na sua variável
obs.: seu IFS default é igual ao meu :)

Talvez o problema esteja antes desse ponto, ou até na chamada do script, mas 
usando esta técnica em pontos anteriores você deverá conseguir isolar o 
problema.

Independentemente das minhas sugestões, espero que outros colegas possam 
contribuir, talvez de forma bem mais eficiente.

Acho que posso generalizar, ficamos à disposição! :)


---------------------------------------------------------------------
>From: "zunixbr" <address@hidden>
>Date: Fri, 14 May 2004 03:33:30 -0000
>
>Recebi a resposta referente ao script para zipar arquivos, via  
>servicemenus do konqueror, tentei implantar mas não obtive
>êxito, 
>mesmo pq  
>não tenho muita experiência em Shell Script. 
>
>O script é acionado via servicemenus, do KDE, e deve zipar pastas 
>e/ou  
>diretórios através do programa zip. 
>--------------------------------------------------
>---------------------------- 
>#!/bin/bash  
>#Autor: Kevin Krammer <address@hidden>    
> cd $(dirname $1)  
> nome=`kdialog --caption "Zipar arquivos" --getsavefilename 
>$1.zip .zip`  
> if ["$nome" = ""]  
> then  
> exit 0  
> fi  
> for infile in $@; do  
> zip -r $nome $(basename $infile) /dev/null 2>&1 
> done;#!/bin/bash  
>--------------------------------------------------
>------------------------------- 
>
>Através do comando:  echo "$IFS" | od -b tive os seguintes
>valores 
>do IFS 
>0000000 040 011 012 012 
>0000004 
>
>Tentei inserir uma modificação por: 
>--------------------------------------------------
>------------------------------ 
>#!/bin/bash 
>cd $(dirname $1)  
>nome=`kdialog --caption "Zipar arquivos" --getsavefilename 
>$1.zip .zip`  
>if ["$nome" = ""]  
>then  
>exit 0  
>fi 
>OIFS=$IFS  
>IFS=` 
>for infile in $@; do  
>zip -r $nome $(basename $infile) /dev/null 2>&1 
>done;  
>IFS=$OIFS 
>--------------------------------------------------
>------------------------------- 
>Mas não houve resultado, o nome continuou a aparecer separado e o  
>programa nem zipa  
>
>Como já disse, não tenho muito conhecimento em script e ficarai 
>muito grato se  
>você pudesse apontar os erros e indicar melhorias. 
>
>Obrigado 
>=========================
>=========================
>=========================
>== 
>--- Em address@hidden, "opa" <opa@h...> escreveu 
>> Antes da linha "for infile in $@; do" você deve definir o IFS 
>(Internal Field  
>> Separator) adequado, vide $@ e "man seu_shell". 
>>  
>> Como o default do IFS costuma ser espaço, deve ser exatamente
>por 
>isso que  
>> está pegando a primeira palavra, quando existe espaço no
>nome. 
>Você pode  
>> confirmar "hexamente" o que há no seu IFS assim: 
>>  
>> echo -ne "$IFS"|xxd 
>>  
>> Poderá tentar alterá-lo para TAB: 
>> IFS=`echo -e '\t'` 
>>  
>> Para NL: 
>> IFS=`echo -ne '\\\n'` 
>> ou 
>> IFS=' 
>> ' 
>>  
>> Provavelmente seu separador adequado deve ser o NL. Mas com é
>bom 
>saber  
>> com certeza o que chega no ponto de trabalho, sondar inicialmente, 
>antes 
>> do seu for com: 
>>  
>> echo -ne "$@"|xxd 
>>  
>> talvez não seja má idéia. 
>>  
>> Trocar o: 
>> for infile in $@ 
>> por: 
>> echo "$@"|while read infile 
>> também pode ser uma alternativa. 
>>  
>> Olhando apenas esse trecho do script, são esses os meus
>palpites. 
>>  
>> Boa sorte! 
>>  
>>  
>> 
>--------------------------------------------------------------------- 
>> >From: "zunixbr" <zunix@b...> 
>> >Date: Wed, 12 May 2004 04:00:07 -0000 
>> > 
>> >Eu sou usuario do Kurumin e participante do forum     
>> >http://www.kurumin.com.br/forum/ e estou tentando implantar uma
>
>> >Estrada de     
>> >Desktop e um script que permitiriam zipar pastas e/ou arquivos 
>com    
>> >apenas 1     
>> >clique.    
>> > 
>> >Aqui um meio que adota o programa zip, compactador ,incluso    
>> >no linux,     
>> >por uma Entrada de Desktop que trabalha em conjunto com um    
>> >script shell,     
>> >permitindo compactar arquivos/diretorios com apenas 1 clique com 
>o    
>> >botao     
>> >direito do mouse.    
>> > 
>> >Tanto as entradas quanto o script foram sugeridos por Kevin 
>Krammer   
>> > 
>> >(kevin.krammer@g...), com mudanças do participante    
>> >forum do     
>> >kurumin, Zip Megabyte. Foi testado com sucesso no Kurumin 3.0    
>> >(kernel     
>> >2.4.22-xfs), com kde 3.2.2    
>> > 
>> >A entrada deve ser salva no     
>> >diretorio /usr/share/apps/konqueror/servicemenus/ com a    
>> >extensao .desktop, o     
>> >nome vc escolhe.    
>> > 
>> >Entrada:    
>> > 
>> >#Autor: Kevin Krammer <kevin.krammer@g...>    
>> >[Desktop Entry]    
>> >ServiceTypes=all/all    
>> >Actions=ZipFiles    
>> >=80 =A6     
>> >[Desktop Action ZipFiles]    
>> >Name=Compactar este(s) arquivo(s)    
>> >Exec=zipfiles %F    
>> >Icon=ark.png    
>> > 
>> > 
>> > 
>> > 
>> >O Script devem ficar na pasta /usr/bin com as devidas permissoes   
>> >de    
>> >execucao.    
>> > 
>> >Script zipfiles:    
>> > 
>> >#!/bin/bash     
>> >#Autor: Kevin Krammer (kevin.krammer@g...)    
>> >#Altera=80 =A6ções por Zip Megabyte    
>> >cd $(dirname $1)    
>> > 
>> >kdialog --dontagain zipinfo:zipmsg --msgbox "Voc=80 =A6ê
>pode  
>> >selecionar   
>> >um    
>> >ou mais arquivos e/ou diret=80 =A6órios mantendo pressionada
>a 
>tecla 
>> > 
>> >ctrl,    
>> >colocando todos num =80 =A6único arquivo zip. Neste caso,
>nome do   
>> >primeiro    
>> >arquivo, em ordem alfab=80 =A6ética de sua
>sele=80 =A6ção,  
>> >ser=80 =A6á   
>> >pr=80 =A6é-definido na    
>> >caixa de texto."    
>> > 
>> >$ cat ~/.kde/share/config/zipinfo    
>> >[Notification Messages]    
>> >zipmsg=false    
>> > 
>> >nome=`kdialog --caption "Zipar arquivos" --getsavefilename    
>> >$1.zip .zip`     
>> >if ["$nome" = ""]     
>> >then     
>> >exit 0     
>> >fi     
>> >for infile in $@; do     
>> >zip -r $nome $(basename $infile) /dev/null 2>&1    
>> >done;     
>> > 
>> >Com o clique com o botao direito sobre o(s)    
>> > arquivo(s)/diretorio(s)    
>> >desejado:    
>> > 
>> > 
>> >Agora os problemas...    
>> > 
>> >1. Parece que o programa zip nao consegue zipar    
>> >arquivo(s)/diretorio(s) com     
>> >nomes compostos separados por espaco, exemplo um arquivo .txt    
>> >chamado 'minhas     
>> >musicas' nao e compactado com o nome completo, apenas a palavra
>
>> >'minha'     
>> >aparece na caixa de texto do kdialog . Se um arquivo de nome    
>> >separado por     
>> >espacos estiver num diretorio e este tiver nome 'padrao' o   
>> >programa    
>> >compacta.     
>> > 
>> >Seria muito util um script q enviasse o arquivo ja zipado   
>> >anexado    
>> >pelo kmail (kmail --attach)    
>> > 
>> >Participo do forum Kurumin buscando a maior adapta=80 =A6ção
>do  
>> >sistema   
>> >ao    
>> >usuario leigo, comum,     
>> >que busca a migracao do windows para linux.    
>> > 
>> >Seria muito qualquer ajuda    
>> > 
>> >Obrigado   
>> > 
>> > 
>> >Marcio 




reply via email to

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