簡體   English   中英

在C中實現Shell:輸出重定向是將輸出文件名寫入輸出文件而不是命令結果

[英]Implementing a Shell in C: Output redirection is writing output file name to output file rather than command results

我正在使用輸入和輸出重定向在C中實現一個shell。 我可以成功地進行輸入重定向,但輸出重定向不起作用。 例如,如果我執行ls > out.txt ,則out.txt包含文本“out.txt”而不是ls命令的結果。

我查看了其他堆棧溢出答案以及open()和creat()文檔,但無法解決問題。

如果檢測到輸出重定向(>),這是我當前擁有的代碼:

if(outRedirect == 1)
{
   //I have tried using open() and creat()
   //int out = open(args[1], O_WRONLY|O_CREAT|O_TRUNC, 0640);
   int out = creat(args[1], 0640);
   dup2(out, STDOUT_FILENO);
   close(out);
   //reset flag to 0
   outRedirect = 0;
   //execute command
   execvp(args[0], args);
}

我希望out.txt文件包含:

a.out
in.txt
makefile
out.txt
README
simple-shell
simple-shell.c

但它包含

out.txt

將相關評論轉移到答案中。

您必須從命令行中刪除重定向文本。 命令無法看到shell完成的任何重定向。 你有可能要求將文件列入文件。

你是什​​么意思我“必須從命令行中刪除重定向文本”?

您必須確保當shell執行ls > out.txt>out.txt都不會傳遞給ls 我懷疑你傳遞了文件名。 至少,它解釋了為什么您(僅)看到輸出文件中的文件名。

正如Ajay Brahmakshatriya 所說

我認為你最終執行的命令是ls out.txt 就像喬納森所說,你沒有刪除第二個論點。 這會導致ls只打印out.txt (因為它在目錄中),這就是輸出的全部內容。


謝謝你倆! 這最終成了我的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM