Script de shell para executar um comando com iteração

3

Este é um script que procura .tab arquivos em uma pasta e deve importá-los com ogr2ogr , mas eu falho com o contraventamento correto.

for i in $( ls *.tab )
do
  echo item: $i

  ogr2ogr -f PostgreSQL -s_srs EPSG:21781 -t_srs EPSG:4326 -overwrite \
          -nln $TBL_NAME PG:'"host=localhost user='$DBUSER' dbname='$DBNAME'"' $i
done

E preciso de uma linha de comando para executar a seção ogr2ogr desta maneira:

ogr2ogr -f "PostgreSQL" -s_srs "EPSG:21781" -t_srs "EPSG:4326" -overwrite \
        -nln "geom_tour" PG:"host=localhost user=postgres dbname=gis" DMC_34093.tab 
    
por Martin 03.09.2012 / 23:29

1 resposta

4

Deve ser:

for i in *.tab
do
  echo item: $i

  ogr2ogr -f "PostgreSQL" -s_srs "EPSG:21781" -t_srs "EPSG:4326" -overwrite -nln "$TBL_NAME" PG:"host=localhost user=\'${DBUSER}\' dbname=\'${DBNAME}\'" "$i"
done

Você precisa usar aspas duplas para permitir que o shell expanda variáveis como ${DBUSER} inside.

Anote for i in *.tab em vez de for i in $(ls *.tab) . Não analise a saída de ls , tudo o que faz é mangle nomes de arquivos com espaços e outros caracteres especiais.

    
por 04.09.2012 / 11:42