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

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

Valter Eduardo dos Santos
eduardoves

(usa Ubuntu)

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


  


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

Lucas Moraes
lucasdemoraesc

(usa Ubuntu)

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

Valter Eduardo dos Santos
eduardoves

(usa Ubuntu)

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

Valter Eduardo dos Santos
eduardoves

(usa Ubuntu)

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






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts