mkvmerge em um script bash não é executado

0

Eu fiz um script que faz mux um videofile, vários audiofiles e várias legendas em um .mkv.

o script tenta executar:
"/usr/bin/mkvmerge" -o "test.mkv" "--default-track" "0:yes" "--forced-track" "0:no" "--display-dimensions" "0:853x462" "-d" "0" "-A" "-S" "-T" "(" "mux.mkv" ")" "--language" "0:eng" "--default-track" "0:yes" "--forced-track" "0:no" "--no-global-tags" "--no-chapters" "-a" "0" "-D" "-S" "-T" "(" "test_eng_1.opus" ")" "--default-track" "0:no" "--forced-track" "0:no" "--no-global-tags" "--no-chapters" "-a" "0" "-D" "-S" "-T" "(" "test_und_2.opus" ")" "--language" "0:eng" "--default-track" "0:no" "--forced-track" "0:no" "--no-global-tags" "--no-chapters" "-s" "0" "-D" "-A" "-T" "(" "test_eng_3.idx" ")" "--language" "0:fra" "--default-track" "0:no" "--forced-track" "0:no" "--no-global-tags" "--no-chapters" "-s" "0" "-D" "-A" "-T" "(" "test_fra_5.idx" ")" "--language" "0:spa" "--default-track" "0:no" "--forced-track" "0:no" "--no-global-tags" "--no-chapters" "-s" "0" "-D" "-A" "-T" "(" "test_spa_4.idx" ")" "--title" "test"

Se eu executar o script, ele mostrará: linha 214: (as informações acima): Nenhum arquivo ou diretório desse tipo

Se eu copiar e colar a saída e executá-lo no bash todas as execuções OK:

mkvmerge v7.7.0 ('Six Voices') 64bit built on Mar  3 2015 16:43:14 ... 
Muxing took 3 seconds.

Aqui está a parte do script que tenta executar o mkvmerge:

213 mux="\"/usr/bin/mkvmerge\" -o \"$gname.mkv\" $muxvideo$muxaudio$muxsub$tacks$title"
214 "$mux"

Por que ele é executado no terminal, mas não no script?

    
por Eliot 20.03.2015 / 03:17

1 resposta

1

Seu script define uma variável mux com seu valor sendo o grande comando mkvmerge que você colou, literalmente com todas as aspas duplas e tudo mais: observe como as aspas duplas são escapadas para que sejam incluídas literalmente em a string.

Depois disso:

"$mux"

Que tenta executar um comando com o nome do conteúdo dessa variável, espaços e aspas e tudo. Como não há comando chamado "/usr/bin/mkvmerge" -o "test.mkv" "--default-track" etc ..., você recebe o erro.

Tem certeza de que essa linha não deveria ser essa?

eval "$mux"

... que analisaria o conteúdo de $mux como uma linha de comando do shell, interpretando assim todos esses espaços e aspas duplas como sintaxe do shell em vez de tratá-lo literalmente?

Ou muito mais simplesmente ... apenas execute mkvmerge com todos os argumentos corretos sem primeiro criar um comando entre aspas e colocá-lo em uma variável e depois executar a variável como um comando.

    
por 20.03.2015 / 04:10