Hi, rlhar...@oplink.net wrote: > enscript --media=letter -2 --landscape --borders \ > --header='$n|A.D. $D{%Y.%m.%d}|$* gmt | Page $% of $=' "$1" > ... > when I execute > enscript+ * > in a directory containing several files, enscript prints only the first > file in the directory.
This is because you use only the first argument "$1" in your script. The globbing happens before your script gets started. The shell parser converts your command enscript+ * to a list of arguments enscript+ file1 file2 ... which your script gets to see as "$0" "$1" "$2" ... As i wrote a few days ago, "$@" (with quotes around it) gives you the list of arguments: "$1" "$2" ... According to its man page, enscript is willing to take more than one filename. So may simply write enscript --media=letter -2 --landscape --borders \ --header='$n|A.D. $D{%Y.%m.%d}|$* gmt | Page $% of $=' "$@" If enscript would only take one filename per run, you would have to execute it several times in a loop: for i in "$@" do enscript --media=letter -2 --landscape --borders \ --header='$n|A.D. $D{%Y.%m.%d}|$* gmt | Page $% of $=' "$i" done This would also be the way to go if enscript concatenates all filenames of a run to a single output file whereas you might want several output files. Another way of handling an argument list of variable length is the variable "$#" which gives the number of arguments and the command "shift" which deletes "$1" and shifts "$2" to "$1", "$3" to "$2", and so on. It also counts down "$#". So you always use "$1" and give it new values by "shift": while test "$#" -ge "1" do enscript --media=letter -2 --landscape --borders \ --header='$n|A.D. $D{%Y.%m.%d}|$* gmt | Page $% of $=' "$1" shift 1 done Have a nice day :) Thomas