Dúvida sobre valor em Variável [RESOLVIDO]

1. Dúvida sobre valor em Variável [RESOLVIDO]

Danilo
SuperMax

(usa Arch Linux)

Enviado em 23/10/2015 - 12:39h

Eu não entendo mto de shell, mas estou fazendo um script no Yad pra facilitar umas conversões ou corte de video que costumo fazer.
O problema q estou tendo é com Aspas e/ou espaço nos nomes dos Arquivos/variavel
Assim funciona

#teste.sh
xfce4-terminal -e "bash -c 'time ls \"/home/testes/com espaço\";exec bash;' "


Assim tb funciona
#teste.sh
filename="ls \"/home/testes/com espaço\""
xfce4-terminal -e "bash -c 'time $filename;exec bash;' "


Mas se tento pegar a variável vinda do Yad (fork zenity) ai não vai,
#teste.sh
filename="$(echo $* | sed s/“/\\\"/g)"
xfce4-terminal -e "bash -c 'time $filename;exec bash;' "


Eu fiz os exemplos com ls, pq se funcionar com ls, vai funcionar com as "" tb no comando ffmpeg.
tentei de um monte de jeito, mas basicamente eu preciso
pegar um comando em um campo do Yad e jogar para um script.sh mantendo as aspas pra não dar erro de arquivos ou pastas com espaços.

exemplo do que precisa: campo do Yad com :
ffmpeg -i "/pasta/com espaço/Nome do Video.mp4" c copy "pasta/com espaço/saida do.video.mp4" 

ai aperto um botão no yad q pegar o conteudo do campo e joga pro script:
teste.sh conteudo_do_campo

Eu até consegui fazer funcionar, mas apenas em arquivos e pastas sem espaços no nome.
agradeço desde já se alguém puder me ajudar.



  


2. Re: Dúvida sobre valor em Variável [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 23/10/2015 - 15:02h

SuperMax escreveu:

Mas se tento pegar a variável vinda do Yad (fork zenity) ai não vai,
#teste.sh
filename="$(echo $* | sed s/“/\\\"/g)"
xfce4-terminal -e "bash -c 'time $filename;exec bash;' "


Quem gera aquelas aspas inglesas ‘‘“’’ usadas no sed, acima? É o Yad, ou os arquivos com os quais você está trabalhando possuem essas aspas?

Se o Yad é um fork do Zenity, então ele devolve os nomes dos arquivos na saída padrão, e usa um separador (que é o caráter “|” por padrão, mas pode se mudado) para separar múltiplos nomes, caso você habilite seleção de múltiplos arquivos. Sendo assim, você pode fazer algo como vai abaixo (devidamente adaptado para o Yad).

#!/bin/bash
declare -a file_list
old_ifs=IFS
IFS="|"
exec 3< <(zenity --title "Seleção de Arquivos" --file-selection --multiple)
read -a file_list <&3
exec 3<&-
IFS="$old_ifs"
for (( i=0; i<${#file_list[@]}; i++ )); do
echo "$((i+1))º arquivo: ${file_list[$i]}"
done
md5sum "${file_list[@]}"


Se você não quiser guardar os dados no array file_list pode trabalhar com os arquivos diretamente.

#!/bin/bash
declare -a file_list
exec 3< <(zenity --title "Seleção de Arquivos" --file-selection --multiple | tr \| \\n)
while read file <&3; do
md5sum "$file"
done
exec 3<&-



3. Re: Dúvida sobre valor em Variável

Danilo
SuperMax

(usa Arch Linux)

Enviado em 23/10/2015 - 16:01h

paulo1205 escreveu:

SuperMax escreveu:

Mas se tento pegar a variável vinda do Yad (fork zenity) ai não vai,
#teste.sh
filename="$(echo $* | sed s/“/\\\"/g)"
xfce4-terminal -e "bash -c 'time $filename;exec bash;' "


Quem gera aquelas aspas inglesas ‘‘“’’ usadas no sed, acima? É o Yad, ou os arquivos com os quais você está trabalhando possuem essas aspas?

Se o Yad é um fork do Zenity, então ele devolve os nomes dos arquivos na saída padrão, e usa um separador (que é o caráter “|” por padrão, mas pode se mudado) para separar múltiplos nomes, caso você habilite seleção de múltiplos arquivos. Sendo assim, você pode fazer algo como vai abaixo (devidamente adaptado para o Yad).

#!/bin/bash
declare -a file_list
old_ifs=IFS
IFS="|"
exec 3< <(zenity --title "Seleção de Arquivos" --file-selection --multiple)
read -a file_list <&3
exec 3<&-
IFS="$old_ifs"
for (( i=0; i<${#file_list[@]}; i++ )); do
echo "$((i+1))º arquivo: ${file_list[$i]}"
done
md5sum "${file_list[@]}"


Se você não quiser guardar os dados no array file_list pode trabalhar com os arquivos diretamente.

#!/bin/bash
declare -a file_list
exec 3< <(zenity --title "Seleção de Arquivos" --file-selection --multiple | tr \| \\n)
while read file <&3; do
md5sum "$file"
done
exec 3<&-



obrigado pelo retorno,
as aspas inglesas foi uma gambiarra q eu estava tentando por não estar indo as aspas normais q eu precisava.

acabei resolvendo, o problema estava na forma de enviar do Yad pro script, a linha correta pra não dar problema no script ficou assim:
--field='<b>Executar</b>!\!Executa comando ':FBTN "@bash -ic \"converte-video-p2.sh '\"'%%33'\"'  \"" \ 


isso resolveu o problema.

mas obrigado pela atenção.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts