![Unix[のような]プログラムは、出力先を決定できますか?](https://rvso.com/image/21857/Unix%5B%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%5D%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AF%E3%80%81%E5%87%BA%E5%8A%9B%E5%85%88%E3%82%92%E6%B1%BA%E5%AE%9A%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B%3F%20.png)
最近まで、Unix 系プログラムは、出力が標準出力、ファイルにリダイレクト、パイプのいずれに送られるかを認識していないという印象を持っていました。しかし、このサイトの無関係な U&L の質問によって、次の例に気付きました。
% echo "hello world" > file
% grep --color=auto lo file
hello world
% grep --color=auto lo file | cat
hello world
もちろん、ここでは見えませんが、最初のコマンドでは、予想どおり「lo」が強調表示されます。ただし、パイプを通過する 2 番目の呼び出しでは、色は表示されません。これは、grep
出力がパイプに向けられていることを認識し、色を出力しないようにしたことを示しています。これはどのように行われるのでしょうか。
答え1
答え2
はい、そうです。出力先を決定する方法はいくつかあります。比較については、stackoverflowの関連質問に対する私の回答を参照してください。。
答え3
簡単です。出力先を決定するにはさまざまな方法があります。Pythonでは次のようにできます。
/* CODE. Input will be parsed and executed */
int
PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit,
PyCompilerFlags *flags)
{
if (filename == NULL)
filename = "???";
if (Py_FdIsInteractive(fp, filename)) {
int err = PyRun_InteractiveLoopFlags(fp, filename, flags);