リダイレクトをサポートするシェルを実装しましたが、リダイレクトが完了するとシェルから抜け出します。シェル (stdout) に戻るように管理するにはどうすればよいですか?
int i;
for (i=1; args[i];i++)
{
if (strcmp(args[i],">")==0)
{
printf("argv[i] %s %d \n", args[i], i);
int out = open(args[i+1], O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IRGRP | S_IWGRP | S_IWUSR);
close(1);
int fdl=dup2(out,1);
close(out);
execvp(args[0],args);
// open(STDOUT, ">>", \$out); //doesn't work~!
}
}
シェルを実行すると、次のようになります。
./basic_shell
mysh> pwd > out_pwd
argv[i] > 1
pwd: ignoring non-option arguments
期待どおりに out_pwd を作成し、pwd の結果を書き込みます。しかし、私が試してみると
mysh>ls > out_ls
次のエラーが表示されます。
ls cannot access >: No such file or directory
修正方法のヒントを教えてください。