Reputation: 3408
I am trying to write a shell script that compiles a latex source. I wish to grab the name of the bibliography file which is contained in a command like:
\bibliography{filename}
I need to save "filename" to a shell variable. My solution to this (in tcsh) is dreadfully embarrassing:
set bioliography=grep -v -E "[[:blank:]]*%[[:blank:]]*" poltheory.tex | grep -E "\\bibliography{[A-Za-z0-9_\.]*}" | tail -1 | sed 's/\\bibliography//' | tr -d { | tr -d } | awk '{print $1}'
This breaks down as:
Surely there's an elegant way of doing this that I'm overlooking. Can you wow me? I already have a working command, so this is merely in the name of beauty and shell wizardry.
Upvotes: 0
Views: 43
Reputation: 202465
Rule 1: always write shell scripts using Bourne family shells, not csh family shells.
It's easier to pull the info from the .aux file. Here I'll use an extra feature of bash to chop the .tex off the end of the filename:
#!/bin/sh
texfile="$1"
auxfile="${texfile%.tex}.aux"
grep '^.bibdata{' "$auxfile" | sed 's/.*{//;s/}.*//'
Upvotes: 1