Какой самый простой способ передать файл в качестве аргумента в простом сценарии оболочки? - PullRequest
3 голосов
/ 16 августа 2010

В Mac OS X отлично работает следующее:

#!/bin/bash
R CMD Sweave myfile.Rnw
pdflatex myfile.tex
open myfile.pdf

Теперь я понимаю, что эти 3 строки кода действительно полезны для моей работы - независимо от какого-то конкретного файла.Таким образом, я хотел бы использовать файл в качестве аргумента.Я знаю, как использовать сам аргумент, но у меня есть проблемы с разбиением ввода после строки и последующим его объединением.Если бы мне удалось разделить аргумент имени файла следующим образом:

split($1,".") # return some array or list ("name","ext")

Или есть более простой, совершенно иной способ, чем использование Python в скрипте оболочки?

Заранее спасибо за любые общие советыа также примеры!

Ответы [ 5 ]

6 голосов
/ 16 августа 2010

Вы можете просто взять базовое имя в качестве аргумента и использовать $1.Rnw, $1.tex и $1.pdf.Python отлично подходит для сценариев оболочки, но я обычно придерживаюсь bash для вещей длиной менее 10 строк.

Если вы действительно хотите взять имя файла, вы можете использовать cut -f 1 -d '.' $1.

6 голосов
/ 16 августа 2010

Я делаю все свои сценарии оболочки на python.
Его легче читать, он более мощный и работает на Windows.

2 голосов
/ 16 августа 2010

Один вкладыш Python будет:

python -c "print '$1'.split('.')[0]"

Но идея Натона «Использовать базовое имя в качестве аргумента». ИМХО лучшее решение.

Edit:

Вы используете "backticks" для использования текста, который программа помещает в стандартный вывод, например:

eike@lixie:~> FOO="test.foo"
eike@lixie:~> BAR=`python -c "print '$FOO'.split('.')[0]"`
eike@lixie:~> echo $BAR

Это должно привести к:

test
1 голос
/ 17 августа 2010

Я согласен с предложением Джеральда использовать Makefiles, но его нижний комментарий (выделенный make-файл для каждого проекта) не совсем корректен, так как Makefiles можно сделать более общими.

Замените $ (FILE) на $@ и затем вызывать с помощью «make foo».

Я бы оставил это в качестве комментария к ответу Джеральда, но у меня не было очков для этого.

0 голосов
/ 16 августа 2010

Python, безусловно, является хорошим выбором для сценариев оболочки, однако для простого примера проще использовать bash. Еще раз, для компиляции LaTeX я бы порекомендовал make-файл и использовать GNU make. Если вы не слышали об этом, вы можете сделать что-то вроде этого:

FILE = your_tex_filename
INCLUDES = preface.tex introduction.tex framework.tex abbreviations.tex 

all: $(FILE).pdf

$(FILE).pdf: $(FILE).tex $(INCLUDES) $(FILE).aux index bibliography
    pdflatex $(FILE).tex

index: $(FILE).tex
    makeindex $(FILE).idx

bibliography: $(FILE).bib $(FILE).aux
    bibtex $(FILE)

$(FILE).aux: $(FILE).tex
    pdflatex $(FILE).tex

# bbl and blg contain the bibliography
# idx and ind contain the index
.PHONY : clean
clean:
    rm *.aux *.bak $(FILE).bbl $(FILE).blg \
       *.flc *.idx *.ind *.log *.lof *.lot *.toc core \
       *.backup *.ilg *.out *~

, а затем просто скомпилируйте исходный документ w /

make

или очистить после строительства w /

make clean

Недостатком является то, что вам потребуется выделенный make-файл для каждого из ваших проектов, но с шаблоном, который не является большой проблемой. НТН

PS: Отличное введение в манипулирование строками с оболочкой bash можно найти по адресу http://www.faqs.org/docs/abs/HTML/string-manipulation.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...