Os comandos colados no terminal estão truncados

1

Eu tenho uma lista de comandos que gostaria de colar no terminal para que eles sejam executados um após o outro.

Inicialmente, eles são executados corretamente, mas os comandos mais tarde estão sendo truncados.

Exemplo de comando:

ogr2ogr -nlt PROMOTE_TO_MULTI -progress -skipfailures -overwrite -lco PRECISION=no -f PostgreSQL PG:"dbname='natural_earth' host='localhost' port='5432' user='natural_earth' password='natural_earth'" 50m_physical/ne_50m_lakes.shp

Existem cerca de 150 desses comandos, eles são armazenados no gedit com quebra de linha e estão sendo colados como um bloco direto no terminal.

Resultado esperado:

$ ogr2ogr -nlt PROMOTE_TO_MULTI -progress -skipfailures -overwrite -lco PRECISION=no -f PostgreSQL PG:"dbname='natural_earth' host='localhost' port='5432' user='natural_earth' password='natural_earth'" 50m_physical/ne_50m_lakes.shp
0...10...20...30...40...50...60...70...80...90...100 - done.

Isso funciona para os primeiros 30 comandos, após o qual eu recebo um nível variável de truncamento nos comandos, por exemplo:

$ ogr2o
ogr2o: command not found

$ ogr
ogr: command not found
$ ogr2ogr -nlt PROMOTE_TO_MULTI -progress -skipfailures -overwrite -lco PRECISION=no -f PostgreSQL PG:"dbname='natural_earth' host='localhost' port='5432' user='natural_earth' password='natural_earth'" 50m_physical/ne_50m_graticules_all/ne_50m_grati

FAILURE:
Unable to open datasource '50m_physical/ne_50m_graticules_all/ne_50m_grati'

Então eu sou novo no Linux. Eu queria saber se havia uma maneira melhor de executar isso do que copiar & colar do gedit?

Estou executando o Linux Mint 15 "olivia" Cinnamon 32-bit.

    
por Vesanto 25.09.2013 / 22:18

2 respostas

5

Basta colocar os comandos que deseja executar em um arquivo especial e executá-lo como um script de shell. Invocando um shell com um argumento:

sh your_commands

ou prefixando os comandos com um hashbang e marcando o arquivo como executável com chmod a+x your_commands :

#!/bin/sh
your commands
go
here

que fará com que se comporte como um binário regular e você será capaz de executar apenas

 /path/to/your_commands

Como alternativa, você também pode usar a funcionalidade source do seu shell, que executa os comandos de um arquivo dentro do shell atual (em oposição a spwaning de um novo shell que é o que os dois acima farão):

source your_commands

ou

. your_commands

(ambos têm o mesmo significado).

    
por 25.09.2013 / 22:28
4

Bem-vindo ao Stack Exchange e também ao Linux Mint!

Você pergunta se existe uma maneira melhor do que colar-no-terminal para executar uma longa série de comandos. Por acaso, existe: salve os comandos em um arquivo e execute-o como um script de shell.

Por exemplo Se você salvar seus comandos em ~/scripts/myscript.sh ( ~ é a abreviação de seu diretório pessoal), você pode executá-lo digitando estes comandos:

# change directory to where the script is
cd ~/scripts
# run the script with bash (most scripts are bash scripts)
bash myscript.sh

Preste atenção ao seu diretório de trabalho

Uma coisa a ser observada: o diretório de onde você executa bash myscript.sh será usado como o diretório de trabalho. Se o seu script fala sobre o arquivo 50m_physical/lakes.sh , que está no seu diretório ~/mylakesproject , então isso funcionará:

cd mylakesproject
bash ~/scripts/myscript.sh
# ~/mylakesproject/50m_physical/lakes.sh exists

e isso não funcionará:

cd myotherproject
bash ~/scripts/myscript.sh
# ~/myotherproject/50m_physical/lakes.sh does not exist

e nem isso:

cd scripts
bash myscript.sh
# ~/scripts/50m_physical/lakes.sh does not exist

Boa sorte e divirta-se!

    
por 25.09.2013 / 22:38