Dois comandos de uma vez no Bash

0

Eu quero adicionar um comando bash que faça o seguinte:

Atualmente, preciso executar isso:

$ pdflatex <filename>.tex | open <filename>.pdf

Existe alguma maneira de converter isso em algo como

$ complatex <filename>

e tem os dois comandos executados?

    
por Landmaster 06.05.2018 / 03:09

1 resposta

3

Que tal isso para começar:

complatex () 
{ 
    if [[ -n $1 ]]; then
        pdflatex -output-directory $(dirname "$1") "$1" &&
        xdg-open "${1%%.tex}.pdf"
    else
        for i in *.tex; do
            if [[ ! -f ${i%%.tex}.pdf ]]; then
                pdflatex "$i" &&
                xdg-open "${i%%.tex}.pdf"
            fi
        done
    fi
}

Versão Oneline:

complatex(){ if [[ $1 ]]; then pdflatex -output-directory $(dirname "$1") "$1" && xdg-open "${1%%.tex}.pdf"; else for i in *.tex; do if [[ ! -f ${i%%.tex}.pdf ]]; then pdflatex "$i" && xdg-open "${i%%.tex}.pdf"; fi; done; fi ;}

Esta função testa um argumento, se houver um, ele executa pdflatex salvando os arquivos de saída no diretório do argumento (em vez do atual) e abre a saída .pdf no visualizador de PDF padrão. Se você chamá-lo sem um argumento, ele passa por todos os arquivos .tex no diretório atual, testa se há um .pdf com o mesmo nome e somente se não faz o mesmo que acima.

Para disponibilizar o comando complatex em seu sistema, apenas copie uma das duas versões acima para o arquivo ~/.bash_aliases (crie-o, se necessário) ou ~/.bashrc e abra um novo terminal ou fonte o arquivo alterado em um existente com por exemplo source ~/.bash_aliases .

Exemplo de execução

$ tree -A --noreport
.
├── dummy.pdf
├── dummy.tex
├── other\ dir
└── test.tex
$ complatex test.tex &>/dev/null  # opens test.pdf in PDF viewer
$ tree -A --noreport
.
├── dummy.pdf
├── dummy.tex
├── other\ dir
├── test.aux
├── test.log
├── test.pdf
└── test.tex
$ rm -f test.!(tex)  # removes the output files that were just created
$ cd other\ dir/
$ complatex ../test.tex &>/dev/null  # opens test.pdf in PDF viewer
$ ls  # other dir stays empty
$ cd ..
$ tree -A --noreport
.
├── dummy.pdf
├── dummy.tex
├── other\ dir
├── test.aux
├── test.log
├── test.pdf
└── test.tex
$ rm -f test.!(tex)  # removes the output files that were just created
$ complatex &>/dev/null  # opens test.pdf in PDF viewer, doesn't process dummy.tex as there's a dummy.pdf already
$ tree -A --noreport
.
├── dummy.pdf
├── dummy.tex
├── other\ dir
├── test.aux
├── test.log
├── test.pdf
└── test.tex
    
por dessert 06.05.2018 / 10:58