Pular para o conteúdo

Problema para executar comando com variáveis que tem espaços

Responder tópico
  • Denunciar
  • Indicar

1. Problema para executar comando com variáveis que tem espaços

Enviado em 26/09/2017 - 00:17h

Gostaria de saber se existe alguma forma de trabalhar com variáveis que contenham espaços na execução de scripts shell. Abaixo deixo um exemplo de como eu gostaria de que funcionasse o script.

#!/bin/bash
nome="Relatorio\ semanal.txt"
origem="pasta\ de\ trabalho"

pegarOpcoes(){
#Se o usuário especificar o tipo da busca (Diretorio ou arquivo)
echo "Deseja buscar arquivo ou diretorio?"
echo "Opções: a = arquivo"
echo " d = diretorio"
echo " n = não especificar"
read tipo

case $tipo in
a|A) opcoes+=" -type f"
;;
d|D) opcoes+=" -type d"
;;
n|N) continue
;;
*) echo "Opção inválida"
pegarOpcoes
;;
esac
}

opcoes=" -iname $nome"
pegarOpcoes

find $origem $opcoes

Responder tópico

2. Re: Problema para executar comando com variáveis que tem espaços

Enviado em 26/09/2017 - 06:39h

Remova as aspas ""

nome=Relatorio\ semanal.txt
origem=pasta\ de\ trabalho




LMC ----------------------------------------
----------------------------------------------
#voltalisteiro ---------------------

3. Re: Problema para executar comando com variáveis que tem espaços

Enviado em 26/09/2017 - 11:52h

Esse é o resultado do comando find

find: ‘pasta’: Arquivo ou diretório não encontrado
find: ‘de’: Arquivo ou diretório não encontrado
find: ‘trabalho’: Arquivo ou diretório não encontrado
find: ‘ -iname Relatorio semanal.txt -type f’: Arquivo ou diretório não encontrado

Aparentemente quando se executa o comando, o bash não interpreta os caracteres de controle "\" e separa os parâmetros passados ao comando definidos na variável findOpts.

4. Re: Problema para executar comando com variáveis que tem espaços

Enviado em 26/09/2017 - 21:47h

Consegui identificar uma maneira de fazer o que eu precisava. Abaixo segue o script de exemplo para que possa interessar.

#!/bin/bash

nome="\"Relatorio semanal.txt\""
origem="\"pasta de trabalho\""

pegarOpcoes(){
#Se o usuário especificar o tipo da busca (Diretorio ou arquivo)
echo "Deseja buscar arquivo ou diretorio?"
echo "Opções: a = arquivo"
echo " d = diretorio"
echo " n = não especificar"
read tipo

case $tipo in
a|A) opcoes+=" -type f"
;;
d|D) opcoes+=" -type d"
;;
n|N) continue
;;
*) echo "Opção inválida"
pegarOpcoes
;;
esac
}

opcoes="$origem"
pegarOpcoes
opcoes+=" -iname $nome"

#pode ser assim
eval find $opcoes

#ou dessa forma, tanto faz
comando="find $opcoes"
eval $comando

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder