0

stdout の COPY を bash スクリプト自体からログ ファイルにリダイレクトするのと同様ですが、stdout を TTY デバイスとして保持したいと思います。

たとえば、次のスクリプトがあります。

/tmp/teed-off$ cat some-script
#!/usr/bin/env ruby

if $stdout.tty?
  puts "stdout is a TTY"
else
  puts "stdout is NOT a TTY"
end
/tmp/teed-off$ cat wrapper 
#!/usr/bin/env bash

exec > >(tee some-script.log)

./some-script

それらを実行すると、ラッパーは stdout を TTY デバイスとして使用します。

/tmp/teed-off$ ./some-script 
stdout is a TTY
/tmp/teed-off$ ./wrapper 
stdout is NOT a TTY

ラッパーを介して実行された場合でも、スクリプトが TTY にあると信じられるように、その動作を反転するにはどうすればよいですか?

4

2 に答える 2

1

些細なことではありませんが、pseudo-ttysを介して実行できると思います。おそらく、それ以外の標準的なツールがあるかどうかはわかりませexpectん。

少し考える必要があります。疑似ttyマスターを開き、次にスレーブを開く制御プログラムがあります。スレーブは./some-scriptの出力に接続されます。マスターは制御プログラムによって読み取られ、制御プログラムはマスターから読み取ったデータをファイルと標準出力にコピーします。

私はそれをコーディングしようとしませんでした。標準のシェルコマンドでそれができるかどうかはわかりません。どうしようもありません。ですから、Cコーディングが必要になると思います。

于 2013-02-27T05:35:31.663 に答える
0

ファイル記述子を複製する dup2 を探します

int dup2(int oldfd, int newfd);

于 2013-02-27T05:08:22.250 に答える