我正试图使用cut
更改命令ping
的输出,以获得一些必要的信息,然后将其重定向到带有bash管道的c++程序。
ping google.com | cut -d " " --fields 8 | ./a.out
C++程序做这样的事情:
int main(){
string str;
cin >> str;
cout << "str:" << str << endl;
}
我建议,这样的命令可能会起作用,但它不起作用,执行上面的命令后没有任何输出。但它在不使用cut
的情况下工作得很好。如果我只使用
ping google.com | ./a.out
我的程序会输出。所以我认为问题是我的c++程序无法读取cut
中的字符串。
如何修复它?
是。ping
实用程序是行缓冲的(它在输出每一行之后执行fflush(stdout)
(。
相反,您可以使用GNU coreutils:中的stdbuf
命令将整个管道设置为使用行缓冲
stdbuf -oL -eL bash -c 'ping google.com | cut -d " " --fields 8 | ./a.out'