Como posso saber qual arquivo está sendo usado em um bash for loop?

1

Eu tenho uma pergunta muito complicada que eu queria resolver por um bom tempo.

Se $line for de $(cat foo) , faça ação1

Se $line for de $(cat bar) , faça ação2

for line in $(cat foo) $(cat bar) ; do   
    if [ ??? ]
        then action1
        else action2
    fi
done

O que eu preciso colocar na declaração if?

    
por TuxForLife 06.05.2015 / 06:48

2 respostas

0

E sobre isso?

for line in $(grep '^.*$' foo /dev/null) $(grep '^.*$' bar /dev/null)
do   
    if [[ ${line} =~ ^foo.*$ ]]
    then
        action1
    else
        action2
   fi
done

Se você quiser remover o nome do arquivo principal em $line , poderá adicionar line=$(<<<$line sed 's/^foo:\(.*\)$//') e line=$(<<<$line sed 's/^bar:\(.*\)$//') no corpo if / else.

    
por kos 06.05.2015 / 07:37
-1

Auto-solução

Desde que $ line nunca seja igual a "FILECHANGE" (provavelmente nunca no meu caso) isso funcionará

x=1
for line in $(cat foo) FILECHANGE $(cat bar) ; do
  if [ $line = FILECHANGE ]
  then x=$(($x+1))
  elif [ $x = 1 ]
  then echo 1
  elif [ $x = 2 ]
  then echo 2
  fi
done
    
por TuxForLife 06.05.2015 / 08:06