Hai lệnh cùng một lúc trong Bash


0

Tôi muốn thêm một lệnh bash thực hiện như sau:

Hiện tại, tôi cần chạy cái này:

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

Có cách nào để chuyển đổi nó thành một cái gì đó như

$ complatex <filename>

và có cả hai lệnh được thực thi?


3
{}một cú pháp trong findlệnh?
mja

5
Tôi nghi ngờ về tiền đề của bạn vì (a) pdflatexthường không ghi vào thiết bị xuất chuẩn (b) ít nhất là trên các hệ thống Linux openthường không mở tệp và (c) ngay cả khi có, sẽ không có lý do gì để chuyển sang stdin; Tôi mong đợi một cái gì đó giống nhưpdflatex somefile.tex ; xdg-open somefile.pdf
Steeldo

Câu hỏi không hoàn toàn rõ ràng, nhưng tôi nghĩ rằng bạn đang tìm kiếm điều này: Askubfox.com/a/539293/301745
wjandrea

1
Tôi đề nghị sử dụng một chức năng. Xem help function.
Cyrus

Cám ơn bạn đã phản hồi của bạn! Để giải quyết mối quan tâm của bạn: - Tôi đã sử dụng {} làm trình giữ chỗ cho tên. Không có gì lạ mắt. - pdflatexkhông ghi vào thiết bị xuất chuẩn, nhưng nó sẽ biên dịch pdf vào thư mục, vì vậy, ngay sau khi tôi biên dịch nó, tôi muốn lấy pdf đã biên dịch và hiển thị nó trên máy tính của mình. - openmở tập tin trong macos. Hệ thống thực tế tôi sử dụng để mở tệp nằm ngoài tiền đề của câu hỏi này, vì vậy đừng lo lắng về điều đó :) - Để trả lời câu hỏi khác, user$ pdflatex main.tex | open main.pdfhoạt động hoàn toàn tốt trong máy tính của tôi: D
Landmaster

Câu trả lời:


3

Làm thế nào về điều này để bắt đầu:

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
}

Phiên bản trực tuyến:

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 ;}

Hàm này kiểm tra một đối số, nếu có một đối số, nó chỉ chạy pdflatexlưu các tệp đầu ra trong thư mục của đối số (thay vì hiện tại) và mở đầu ra .pdftrong trình xem PDF mặc định. Nếu bạn gọi nó mà không có đối số, nó sẽ đi qua mọi .textệp trong thư mục hiện tại, kiểm tra xem có một .pdftên nào có cùng tên không và chỉ khi không thực hiện giống như trên.

Để complatexcung cấp lệnh trên hệ thống của bạn, chỉ cần sao chép một trong hai phiên bản ở trên vào tệp của bạn ~/.bash_aliases(tạo nếu cần) hoặc ~/.bashrcmở một thiết bị đầu cuối mới hoặc lấy nguồn đã thay đổi trong tệp hiện có với ví dụ source ~/.bash_aliases.

Chạy ví dụ

$ 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.