[英]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
。 我懷疑你傳遞了文件名。 至少,它解釋了為什么您(僅)看到輸出文件中的文件名。
我認為你最終執行的命令是
ls out.txt
。 就像喬納森所說,你沒有刪除第二個論點。 這會導致ls
只打印out.txt
(因為它在目錄中),這就是輸出的全部內容。
謝謝你倆! 這最終成了我的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.