Não é possível ecoar ou criar um link simbólico para um arquivo com caracteres especiais em seu nome dentro do script bash

2

Estou tentando criar um link simbólico para arquivos com a seguinte convenção de nomenclatura:

.$abc$namehere.zip;1

Como pode ser visto, tem os seguintes caracteres especiais:. $;

No meu script bash eu tenho as seguintes linhas de código:

FILE1='find /mydir/ -name "\.\$abc\$*namehere*.zip*" | sort -rn | head -1'
ln -s $FILE1 .
echo "$FILE1"

Quando eu emito o comando find sozinho na linha de comando, recebo um resultado exibido na tela do arquivo em que estou interessado. No entanto, quando ele é colocado no script acima, o comando de link simbólico retorna :

ln: './.': cannot overwrite directory

E o comando echo retorna uma linha em branco em vez do nome do arquivo.

Posso obter alguma ajuda sobre como posso corrigir isso no meu script para criar um link simbólico para esses arquivos com caracteres especiais?

    
por methon.dagger 25.11.2013 / 03:04

1 resposta

6

Use $() em vez de backticks:

FILE1=$(find /mydir/ -name "\.\$abc\$*namehere*.zip*" | sort -rn | head -1)
ln -s "$FILE1" .
echo "$FILE1"

O problema é que desde que você esteja colocando o nome do seu arquivo entre aspas duplas, o bash está expandindo-o para que isso

\.\$abc\$*namehere*.zip*

é expandido para

\.namehere*.zip*

Essa é uma das muitas razões pelas quais os backticks estão obsoletos e $() deve ser sempre preferido.

    
por 25.11.2013 / 03:33