よく、lpr のフィルタのシェルスクリプトに gs -sOutputFile=- ... という行が入っていることがある。 これは結果を標準出力に出せ、という指定であるが、これはトラブルを生むことがある。 PostScript のオペレータの中には標準出力に文字列を出力するものがあり、 そのようなオペーレータの出力とプリンタの制御コードと混じってしまうのである。 さらに悪いことに、そのようなオペレータを使う PS コードを生成するドライバがある。 (特に %%[ Page: 1 ]%% とか出してくる奴。もしかしたら標準的なのかも。) これを解決するには gs の標準出力を経由せずにプリンタにデータを送り込めば良い。 これは例えば次のようにすれば実現できる。 gs -sOutputFile=/dev/fd/3 ... 3>&1 >&2 また、/dev/fd/ が無いシステムなら次のようにする。 gs -sOutputFile='|cat >&3' ... 3>&1 >&2