Eu nao tenho certeza mais acho isso nao e possivel com bash, talvez com
zsh!!
o qual mesmo usando nao conheco muito,
Eu melhoraria o seu codigo, voltando o loop .. algo assim
homes=(`awk -F: '($3 >= 1001) && ($3 != 65534) { print $6 }' /etc/passwd`);
for home in [EMAIL PROTECTED];do
if [ -d $home/Defaults ];then
x=(`ls -d $home/Defaults/*`)
echo -e ${x[*]//%/\/$gs_defaults\/$(wmaker)\\\n} | sed
's#^# apply_fix #g'
fi
done
Pra simular um hash do perl, eu ja usei varias vezes algo como
while read key element;do
if [ $key == "fruta" ];then
echo $element
elif [ $key == "verdura" ];then
echo $element
else
echo "NADA"
fi
done < /tmp/XXXXX
Onde eu usava paste pra concatenas colunas e relacionando a primeira
a segunda,
algo como
fruta banana
fruta pera
verdura xxxx
verdura xxxx
Tomara que isso tenha ajudadi de alguma forma, qualquer coisa me
manda um email
Atenciosamente
Ricardo A. Reis
UNIFESP
Unix and Network Admin
On Tue, 18 Apr 2006 14:42:24 -0300, oteb_04 <[EMAIL PROTECTED]> wrote:
> Olá
>
> Estou vendo como resolver um item da lista de coisas a serem feitas
> em um script(upgrade-windowmaker-defaults do pct .deb). Uma das coisas
> que estimula a tarefa é que talvez isso matenha o script em #!/bin/bash
> e o autor não faça a tradução para perl.
>
> O item: * Fix that ugly hack with fix*
> #Is there something in the shell like Perl's hashes? It could be nice to
> #do something like "foreach $var (keys %fixes)" to associate fixes with
> #file names so I don't have to track things all over the place
>
> Vi no capitulo 26 do guia abs[0] uma menção ao for-each(Example
> 26-4), mas
> não sei bem como é isso em perl. A pergunta é: como se faz um
> "foreach $var (keys %fixes)" em shellscript?
>
> O que fiz até agora foi, ao invéz de usar um loop for, como no
> script:
>
> for dir in `cut -d : -f 6 /etc/passwd | sort -u` ; do
> apply_fix $dir/$gs_defaults/WindowMaker "$fix1" "$fix2" $fix6"
> apply_fix $dir/$gs_defaults/WMState "$fix3"
> apply_fix $dir/$gs_defaults/WMWindowAttributes "$fix4"
> done
>
> usar uma linha dessas:
> x=( `ls -d /home/*` )
> echo -e ${x[*]//%/\/$gs_defaults\/$(wmaker)\\\n} | sed
> 's#^# apply_fix#g'
>
> Isso retorna uma linha para cada usuário:
> apply_fix /home/user/Defaults/WindowMaker $1 $2 $3
> ...
>
> sendo $(wmaker) uma chamada para a função que contém os $fixn. Teria
> que ter uma linha para cada um dos WindowMaker, WMState,
> WMWindowAttributes.
>
> Fora o uso do 'ls -d /home/*' para filtrar melhor os diretórios, não
> vejo
> alguma melhora do que fiz em relação ao que já existe. Se alguém
> puder esclarecer um pouco o assunto seria muito bom.
>
>
> []
> hpfn
>
>
> [0] - http://www.tldp.org/LDP/abs/html/arrays.html
>
> - a função apply_fix
> apply_fix ()
> {
> file_to_fix=$1; shift
> if [ -e $file_to_fix ] ; then
> echo -n "Fixing $file_to_fix... "
> while [ $# -gt 0 ] ; do
> sed -e "$1" $file_to_fix > $tempfile
> cat $tempfile > $file_to_fix
> shift
> done
> echo done.
> fi
> }
>
> - a função wmaker
> wmaker(){
> echo -n 'Wmaker $1 $2 $3';
> }
>
>
>
>
>
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação,
> como perl, C etc. Quem insistir em não seguir esta regra será moderado
> sem prévio aviso.
> ---------------------------------------------------------------------
> Sair da lista: [EMAIL PROTECTED]
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
>
>
>
>
>
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
_______________________________________________________
Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz.
http://br.info.mail.yahoo.com/
---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: [EMAIL PROTECTED]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Links do Yahoo! Grupos
- Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/shell-script/
- Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
- O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!.
