Conteúdo especial e linha por linha [duplicado]

0

commrads! Eu tenho um arquivo:

# cat file
'\.\Aktiv Co. Rutoken S 00 00\USER1@R69-20180109'
'\.\Aktiv Co. Rutoken S 00 01\USER2@R69-20180109'

e eu preciso executar linha por linha:

for LINE in 'cat file' 
do
/opt/cprocsp/bin/amd64/certmgr -inst -cont $LINE
done

MAS! O arquivo tem um conteúdo especial como: '\. . e etc. E quando eu começo meu script com "set -x" eu vejo isso:

+ for LINE in ''cat file''
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont ''\''\.\Aktiv'
Error
+ for LINE in ''cat file''
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont Co.
Error
+ for LINE in ''cat file''
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont Rutoken
Error
+ for LINE in ''cat file''
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont S
Error
+ for LINE in ''cat file''
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont 00
Error
+ for LINE in ''cat /home/user/Aktiv''
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont '00\USER1@R69-20180109'\'''
+ for LINE in ''cat file''
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont ''\''\.\Aktiv'
Error
+ for LINE in ''cat file''
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont Co.
Error
+ for LINE in ''cat file''
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont Rutoken
Error
+ for LINE in ''cat file''
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont S
Error
+ for LINE in ''cat file''
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont 00
Error
+ for LINE in ''cat /home/user/Aktiv''
+ /opt/cprocsp/bin/amd64/certmgr -inst -cont '01\USER2@R69-20180109'\'''

NO IDEAL DEVE SER:

/opt/cprocsp/bin/amd64/certmgr -inst -cont '\.\Aktiv Co. Rutoken S 00 00\USER1@R69-20180109'
/opt/cprocsp/bin/amd64/certmgr -inst -cont '\.\Aktiv Co. Rutoken S 00 01\USER2@R69-20180109'

Eu acho que é tudo de conteúdo especial (arquivo). Alguma idéia?

    
por Oleg Kalinin 25.05.2018 / 15:16

1 resposta

3

Sim, quando você faz uma iteração sobre a saída de cat file , você itera as palavras .

Uma solução:

PATH=/opt/cprocsp/bin/amd64:$PATH

while IFS= read -r line; do
    certmgr -inst -cont "$line"
done <file

Isso lerá as linhas, uma por uma, e lerá corretamente as barras invertidas e os espaços entre as palavras. Observe a cotação de $line . Consulte " Noções básicas sobre" IFS = read -r line "".

Eu originalmente incluí uma versão usando xargs , mas percebi que isso não preservava as barras invertidas nos dados de file em algumas circunstâncias e removia as aspas simples.

    
por 25.05.2018 / 15:28