[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
arrays -- foreach
From: |
oteb_04 |
Subject: |
arrays -- foreach |
Date: |
Tue, 18 Apr 2006 17:42:24 -0000 |
User-agent: |
eGroups-EW/0.82 |
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';
}
- arrays -- foreach,
oteb_04 <=
- Re: [shell-script] arrays -- foreach, Ricardo A. Reis, 2006/04/21
- Re: [shell-script] arrays -- foreach, Felipe Kellermann, 2006/04/21
- Re: arrays -- foreach, oteb_04, 2006/04/22
- Re: [shell-script] Re: arrays -- foreach, Ricardo A. Reis, 2006/04/23
- Re: arrays -- foreach, oteb_04, 2006/04/23
- Re: arrays -- foreach, oteb_04, 2006/04/23
- Re: [shell-script] Re: arrays -- foreach, Ricardo A. Reis, 2006/04/30
- Re: arrays -- foreach, oteb_04, 2006/04/30