Shell
如何將 C 程序的輸出從 /dev/tty 重定向到 /dev/null?
考慮這個範例 C 程序,它寫入
/dev/tty
並且沒有命令行選項使其不這樣做。#include <stdio.h> int main (void) { FILE* fout = fopen("/dev/tty", "w"); fprintf(fout, "Hello, World!\n"); fclose(fout); }
如何將它的輸出重定向到
/dev/null
shell 腳本中?PS我讀了這個答案,但我不太了解。無論如何,我期待一個不會修改程式碼源的答案。
長話短說:
script -c myprogram /dev/null </dev/null >/dev/null
您不能像
/dev/tty
重定向標準輸出一樣“重定向”。標準輸出定義為文件描述符。程序在啟動時寫入文件描述符 1 上已經打開的任何文件。一些作業系統提供/dev/stdout
的文件相當於標準輸出,但它是標準輸出的“別名”。相反,/dev/tty
是一個文件名,它指的是程序的控制終端。如果一個程序打開/dev/tty
,它會顯式打開/dev/tty
,並且無法重定向。您可以做的是使用與執行它的程序的控制終端不同的控制終端執行程序。一個簡單的方法是使用
script
命令。最簡單的形式:script -c myprogram /dev/null >/dev/null
myprogram
執行和打開時/dev/tty
,這是由 提供的script
終端,而不是script
執行的終端。當script
它檢測到終端上的寫入時,它會同時寫入自己的標準輸出並寫入指定的打字稿文件;因此我將script
的標準輸出和打字稿文件都設置為/dev/null
.如果
myprogram
從終端script
讀取,則從其自己的標準輸入讀取,因此您可能也希望將其重定向到/dev/null
。請注意,
script
不會將退出狀態傳遞myprogram
給其呼叫者。一些實現(例如 Debian 及其衍生版本中的實現)可以-e
選擇這樣做。