Estou usando Arch Linux, gerenciador de janelas Openbox e bash.
Tudo está atualizado com as versões mais recentes.
Alguém pode me dizer por que não consigo fazer com que a "$page_range"
variável apareça pdftk
quando especifico alguns intervalos de páginas como 3-5 7-9
?
Quando especifico apenas um intervalo de páginas 3-5
na minha caixa pop-up yad, tudo funciona como deveria.
pdftk permite que mais de um intervalo de páginas seja definido no comando. Na verdade, quando digito o comando na linha de comando sem usar variáveis bash, o pdftk funciona conforme o esperado, considerando os intervalos de páginas 3-5 7-9
. Só que não quando contenho esse valor dentro da variável "$page_range"
.
Tudo o que quero fazer é extrair os intervalos de páginas 3-5 e 7-9 do arquivo
/home/$USER/my_file.pdf
para outro arquivo pdf
usando a variável $page_range
para definir meus intervalos.
Aqui está meu script simples.
#!/bin/bash
# collect the values with yad
extract_values=$(yad --form --width=200 \
--title="Enter the page ranges you wish to extract" \
--text="\n\n Enter the page ranges you wish to extract\n as eg 301-302\n or 301-302 305-306\n for grouping" \
--field="Page range":text "11-13 21-23" \
--button="Cancel!gtk-close":2 \
--button="Edit script":1 \
--button="Submit":0)
# strip out the values from the string
page_range=$(echo $extract_values | cut -d '|' -f 1)
echo $page_range
# produce a unique file extender
page_range_slugify="$(echo "$page_range" | sed 's/ /_/g')"
echo;echo $page_range_slugify
echo
# specify the filename
f=/home/$USER/my_file.pdf
# get path and file name without pdf extension
fz="${f%.*}"
# check everything is as it should be
yad --text="\n page range = $page_range\n page_range_slugify = $page_range_slugify\n file + path without file extension = $fz\n\n"
# below works only for one range but will not expand for two page ranges
pdftk "$f" cat "$page_range" output "$fz"_"$page_range_slugify".pdf
# below takes one range only as above
#pdftk "$f" cat "$(printf %s "$page_range")" output "$fz"_"$page_range_slugify".pdf
# below takes both ranges when ranges are directly placed within the command
#pdftk "$f" cat 3-5 7-9 output "$fz"_"$page_range_slugify".pdf
Isso está acontecendo porque você está fazendo a coisa certa, está citando suas variáveis. No entanto, como estão entre aspas, isso significa que os dois intervalos são passados como uma única string
pdftk
e espera duas ou mais strings separadas por espaços. Neste caso específico, onde você conhece e controla qual é o valor da variável, você pode conseguir escapar sem aspas. Mas não em todos os casos, e parece que você está pedindo informações aos usuários para que eles possam passar qualquer coisa para o script, tornando isso um risco de segurança, então a solução limpa é usar um array. Experimente isto:Você pode então passar isso como
"${page_range[@]}"
e ter os benefícios de citar suas variáveis com segurança e a facilidade de uso de ter vários intervalos em uma variável.Portanto, as linhas relevantes no seu script tornam-se:
A solução é não colocar aspas duplas na variável
$page_range
.Pelo menos faz o script funcionar funcionalmente.
ou seja, faça isso,
$page_range
não isso
"$page_range"
Por alguma razão, o pdftk não gosta
" "
da expansão dessa variável específica.Eu estava supondo que
pdftk
estava comendo uma das aspas e não a outra naquela posição por causa de algum bug que causa falha. Mas isso não pode ser assim porquepage_range="3-5"
expande corretamente entre"$page_range"
aspas duplas, sem espaço,mas
page_range="3-5 7-9"
não expande corretamente como"$page_range"
aspas duplasPortanto, deve ter algo a ver com o espaço no meio dos intervalos de páginas durante as citações duplas e a maneira como isso é expandido ou a maneira como o pdftk o vê.
Alguém tem alguma ideia?
Mesmo que agora tudo esteja funcionando sem as aspas em torno
$page_range
da variável, isso é muito estranho.Porque normalmente aspas em torno da variável no bash são seguras. Estamos todos acostumados a fazer isso na eventualidade de um caminho e nome de arquivo que estamos processando conter espaços temidos!
Portanto, é muito estranho que aspas duplas não resolvam os espaços e aspas não.
Que estranho.
Outro pensamento é que a expansão do espaço pode ser para um tipo específico de espaço, em um formato específico de codificação de caracteres que o pdftk não gosta.