pkftk.jar executável com o script bash pdftk diretório atual

3

No ubuntu-16.04, o programa de linha de comando pdftk foi removido. Eu uso o pdftk todos os dias, então estou trabalhando no uso deste link do PDFTK a partir das instruções encontradas em link

#!/bin/bash
java -jar pdftk.jar

Agora eu construí o script bash chamado pdftk com o código acima e o coloquei em /usr/local/bin/ e o tornei executável com

sudo chmod +x /usr/local/bin/pdftk

Eu copiei o arquivo pdftk.jar para /usr/local/bin/ e tornei-o executável com o mesmo comando.

Não está funcionando como eu esperava agora:

me@mine:~/M$ sudo ls -l /usr/local/bin/pdftk
    ---xr-xr-x 1 root root 32 May  3 13:38 /usr/local/bin/pdftk

me@mine:~/M$ sudo ls -l /usr/local/bin/pdftk.jar
-rwxr-xr-x 1 root root 742367 May  2 16:32 /usr/local/bin/pdftk.jar

Quando tento fazê-lo funcionar em qualquer diretório, ele falha.

me@mine:~/M$ pdftk *.pdf output john.pdf
    Error: Unable to access jarfile pdftk.jar

O que eu fiz de errado?

    
por Dan Hunt 03.05.2018 / 22:39

1 resposta

2

Se o script pdftk.jar e seu pdftk viverem lado a lado dentro de /usr/local/bin , tudo que for necessário é passar o caminho real para o arquivo JAR. Você pode fazer isso no shell script assim:

#!/usr/bin/env bash
java -jar /usr/local/bin/pdftk.jar "$@"

ou, na minha opinião, a solução mais robusta:

#!/usr/bin/env bash
java -jar "$0.jar" "$@"

O último usa o nome do script de shell e acrescenta o sufixo .jar . Isso é tudo que realmente faz. Então, enquanto ambos moram no mesmo diretório, isso deve funcionar. Mesmo se você movê-los em conjunto. Considerando que a primeira solução exigiria que você ajustasse o script de shell para usar o novo caminho para o arquivo JAR.

Eu prefiro dar aspas duplas também, porque se você decidir copiar os dois arquivos em um caminho com um espaço em branco, o script será quebrado.

Eu também mudei o hashbang como este é mais portátil (através de vários sabores Linux e BSD).

    
por 03.05.2018 / 23:01