basename está exibindo um caractere 'enter' junto com o nome do arquivo

0

Eu estou lendo um arquivo de texto linha por linha usando while loop cujo conteúdo é de diretórios e nomes de arquivos. Eu li os nomes dos arquivos usando o comando basename. Eu quero verificar se esse arquivo existe em um diretório. Mas o código abaixo escrito não funciona. Quando faço eco do comando basename, ele está emitindo um caractere 'enter' junto com o nome do arquivo. Como faço para remover o 'enter character'?

while read line;do
   file='basename "$line"'
   dir='dirname "$line"'
   if [ -f "/data/config/${file}" ]; then
    echo "${file} is present"
   fi
done < /data/textfile.txt*

o conteúdo de textfile.txt é fornecido abaixo

config/local/common/environment.properties
config/local/common/jmsservices.xml
config/local/common/ejbservices.xml
    
por Mathew 23.02.2016 / 14:18

2 respostas

0

Este é o comportamento padrão de echo . Da página man

The echo utility writes any specified operands, separated by single blank (') characters and followed by a newline (\n') character, to the standard output.

Você pode especificar -n para evitar a adição da nova linha:

 -n    Do not print the trailing newline character.  This may also be achieved by appending '\c' to the end of the string, as is done by iBCS2 compatible systems.  Note that this option
       as well as the effect of '\c' are implementation-defined in IEEE Std 1003.1-2001 (''POSIX.1'') as amended by Cor. 1-2002.  Applications aiming for maximum portability are
       strongly encouraged to use printf(1) to suppress the newline character.
    
por 01.03.2016 / 07:54
0

Por man basename :

NAME
   basename - strip directory and suffix from filenames 
...
   -z, --zero
          end each output line with NUL, not newline

Se você decidir usar -z , o shell pode reclamar sobre o NUL, o que significa que você pode ter que envia o fluxo de erro para /dev/null .

    
por 27.02.2017 / 17:54