Você está fazendo referência à variável basename
(com $basename
), mas nunca a atribui a nada, o que significa que ela lê para bash
como uma string nula. Você pode precisar tentar basename=${f%.tar.gz}
.
Eu preciso concatenar duas variáveis string no bash em minha máquina Centos 6
for f in *.tar.gz;
do
basename ${f%.tar.gz}
echo $basename
dbaddress='mysql/*.sql'
path="${basename}${dbaddress}"
echo $path
tar -zxvf $f $path
done
O script deve extrair todos os arquivos .sql dentro do diretório basename / mysql /. Mas a saída do meu código é a seguinte:
basename
mysql/*.sql
tar: mysql/*.sql: Not found in archive
tar: Exiting with failure status due to previous errors
Como você pode ver, o $ basename não é adicionado ao $ dbaddress. Estou faltando alguma coisa?
Você pode tentar isso para combinar duas variáveis:
var1="Hello"
var2="$var1 world!"
Mas no seu código, você não está declarando a variável basename
!
Experimente basename=${f%.tar.gz}
.
Para depurar problemas como esse, coloque um set -x
antes do loop em seu script e você verá o que cada comando está executando ( set +x
para desativá-lo).
Você verá que está realmente executando o comando basename ${f%.tar.gz}
, presumivelmente no arquivo basename.tar.gz
, que apenas ecoa basename
, mas não o salva em nenhuma variável. Então você echo $basename
e a variável basename
está vazia, e é por isso que você vê uma linha vazia na saída.
Tags bash