Fazendo várias chamadas para um programa através de um script de shell bash

1

Suponha que eu tenha um programa make_ndx que é gerado através da opção -o . Gostaria de chamar myprogram de um script de shell bash e gerar dois arquivos, out1.ndx e out2.ndx . ( myprogram usa uma string como entrada para a opção -o e anexa automaticamente a extensão de arquivo .ndx a essa string.) Então, eu escrevi um script de shell bash:

#!/bin/bash

make_ndx -o out1
make_ndx -o out2

Eu obtenho dois arquivos de saída: out1.ndx e out2.ndx . Mas gostaria de obter out1.ndx e out2.ndx .

Parece que o caractere corresponde a uma nova linha ou a um caractere de retorno (possivelmente \n ou \r ?), porque quando copio e colo o nome do arquivo em um arquivo de texto (ou neste post) , out1.ndx aparece como

out1
.ndx

(Observe que, para o propósito deste post, estou usando outro caractere ( ) para representar o símbolo quadrado que vejo na minha interface SSH, desde quando copio o caractere real da interface gráfica do SSH para aqui , Eu simplesmente obtenho um caractere de nova linha.)

Como posso escrever meu script de shell bash para que o caractere de nova linha não apareça no nome do arquivo do primeiro arquivo de saída? O mesmo problema ocorre quando eu coloco um espaço extra entre as chamadas para make_ndx :

#!/bin/bash

make_ndx -o out1

make_ndx -o out2

Obrigado pelo seu tempo.

    
por Andrew 20.08.2012 / 21:26

1 resposta

2

Parece haver duas possibilidades:

  1. Você está passando como parte do nome do arquivo. Isso normalmente não deveria acontecer. Isso pode acontecer se você tiver um arquivo com caracteres EOL incompatíveis. O Windows usa um par CRLF para finalizar uma linha em um arquivo de texto; O Unix usa apenas LF. Dependendo de como você editar o arquivo, você pode conseguir colocar o CRLF lá, e isso quebrará todos os tipos de coisas.

    Outra variante disso é que, se out1 for realmente proveniente de uma variável ( make_ndx -o "$out1" ), você pode ter capturado um LF na variável. Fazer echo -n "$out1" | xxd -p informará se você tiver; verifique se termina em 0a .

  2. make_ndx está com bugs. O comando não é passado, inserindo-o internamente. Nada que você possa fazer de um script bash (bem, além de mv para corrigir o nome). Se você tiver origem em make_ndx , poderá corrigi-lo sozinho, caso contrário, será necessário entrar em contato com quem oferecer suporte.

Você pode verificar as terminações de linhas mistas de várias maneiras. Por exemplo, se você usar xxd para fazer um despejo hexadecimal do script bash, 0x0d será CR (\ r). 0x0a é LF (\ n). Você não deve ver nenhum CR no arquivo.

    
por 20.08.2012 / 21:39