シェルでの実装場所が分からなかったので、straceを使ってシステムコールレベルでの挙動を確認してみました。 使用するシェルによって細かい部分は異なるが、大まかな流れということで。 標準出力リダイレクト まずは、以下のようなechoで文字列をファイルに書き込む場合を確認する。 $ strace sh -c "echo hoge > sample.txt" (省略) open("sample.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3 fcntl(1, F_DUPFD, 10) = 10 close(1) = 0 fcntl(10, F_SETFD, FD_CLOEXEC) = 0 dup2(3, 1) = 1 close(3) = 0 write(1, "hoge\n", 5) = 3 dup2(10, 1) = 1 close(10) = 0 上記