Colocando string lida do arquivo dentro de aspas duplas

0

Eu estou lendo de um arquivo de entrada que contém alguns números hexadecimais de um script bash. Então, eu quero passar essas seqüências como argumento de linha de comando de um arquivo executável.

Diga, aqui está meu test.txt :

278dca53f96014be
6c39b2d481e75f0a
38e5942f6bd0c71a

Estou lendo o script:

i=0
while read line || [ "$line" ]; do
    arr[$i]="$line"
    i=$((i+1))
done < test.txt

max=2
for n in 'seq 0 $max'
do
s=${arr[$n]}
./main -o $s
done

Como você pode ver, os números são passados como opção de linha de comando para ./main .

Agora, o problema é que preciso manter $s entre aspas duplas. Eu tentei isso:

$t='"'
$s=$t$s$t

mas não funcionou.

Alguma ideia de como fazer isso funcionar?

    
por pushpen.paul 30.03.2018 / 19:04

2 respostas

2

Nos comentários, parece que o arquivo test.txt vem de um sistema Windows e é um arquivo de texto do DOS. Você deve convertê-lo em um arquivo de texto Unix com dos2unix . Alternativamente, modifique o abaixo para usar tr -d '\r' <test.txt | head -n 3 no lugar de apenas head -n 3 test.txt .

Você tem um arquivo com linhas de texto e precisa invocar o script / programa main uma vez para as três primeiras dessas linhas:

head -n 3 test.txt | xargs -n 1 main -o

Se você realmente precisar que as aspas duplas façam parte do argumento (isso é incomum):

head -n 3 test.txt | xargs -I XX main -o '"XX"'

Para invocar main uma vez para cada linha no arquivo, use

xargs -n 1 main -o <test.txt
    
por 30.03.2018 / 19:24
1

Usando o comando GNU sed e valuate :

sed 's#^#./main -o &#e' test.txt

E se a formatação estiver errada, preceda apenas isso com algum código. Por exemplo, se o formato da primeira linha for " ./ main -o 27 8d ca 53 f9 60 14 be ", isso funcionará:

sed 's/../& /g;s#^#./main -o &#e' test.txt
    
por 30.03.2018 / 21:41

Tags