Articles of io redirection

Tee的pipe道标准输出会影响其文件的输出

我遇到了答案如何发送一个进程的标准输出到多个进程使用Unix(或Windows)(最好是未命名的)pipe道? 当我注意到一个奇怪的问题时,正在玩弄grep 。 以下工作如我所料: $ while [ 1 ]; do sleep 1 ; echo tick; done | tee >(grep -o ti) >(grep -o ic) >(grep tick) >/dev/null ic ti tick ic tick ti ^C 所有三个grep命令都应用于​​循环的输出。 但是,如果我将tee的输出传输到grep(而不是将其redirect到/ dev / null),则文件上的grep停止工作: $ while [ 1 ]; do sleep 1 ; echo tick; done | tee >(grep -o […]

C将标准输出redirect到几个地方

将输出redirect到另一个目的地是相当容易的。 我可以轻松实现: freopen ("/def/tty0", "w", stdout); printf ("Redirected"); fclose (stdout); 但是,我怎么能redirect到两个或更多的文件? 我需要类似于“tee”所提供的function。 有没有什么众所周知的方法?

如何redirectapt-file更新输出

我想在Python脚本中访问apt-file update命令的输出。 不幸的是,我无法访问输出。 我的尝试: # Does not work: popen_ret = subprocess.Popen([r'apt-file', 'update']), stdout=subprocess.PIPE, stderr=subprocess.STDOUT) output = popen_ret.communicate()[0] print output # Without the "update" argument, it does work: popen_ret = subprocess.Popen([r'apt-file'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) output = popen_ret.communicate()[0] print output 我的猜测是,apt-file本身的问题是,即使直接从控制台,这创build一个空的文件: apt-file update > delme.txt 然而 apt-file > delme.txt 工作正常。 其他peopele似乎也有同样的问题(但没有解决scheme): 在http://www.linuxquestions.org提出的问题

linux shellstreamredirect直接运行一个命令列表

我有这个svn项目…获取未添加的文件列表(在我的情况下,数百): svn status |grep "^?" 输出 ? somefile.txt ? somefile1.txt ? somefile2.txt 我最近被介绍给sed …所以现在我有一个我想运行的命令列表 svn status | grep "^?"|sed "s/^?/svn add/" 输出 svn add somefile.txt svn add somefile1.txt svn add somefile2.txt 我意识到我可以把它pipe到一个文件 svn status | grep "^?"|sed "s/^?/svn add/" >out.sh && sh out.sh && rm out.sh 但是我想避免写一个临时文件。 有没有一种方法,我pipe它像这样的命令: svn status | grep "^?"|sed "s/^?/svn add/" […]

当脚本写入stdout和stderr时如何防止cron邮件

我有一个脚本,我们将调用script.sh写入stdout和stderr 。 我想pipe这个脚本的输出( stdout )到mailx ,但我不想从cron任何电子邮件。 这是我的crontab,设置为每天下午4:00: 00 16 * * * /path/to/script.sh | mailx name@domain.com >/dev/null 2&>1 通过mailx我得到了脚本的stdout输出,但是我仍然从cron收到一封包含脚本stderr输出的邮件。 我也尝试在pipe道的左侧剥去stderr ,如下所示: 00 16 * * * /path/to/script.sh 2> /dev/null | mailx name@domain.com 这导致cron给我发电子邮件说: Null message body; hope that's ok 其实,亲爱的cron ,那对我来说并不好。 任何想法如何做到这一点? 编辑:另一个有趣的实验… 00 16 * * * test -d / 这没有任何输出,但我从cron收到一封电子邮件说,邮件主题和正文是空的…所以为什么要发送? :\

为什么redirect标准input框在一个while bash中读取循环?

考虑下面的示例脚本: #!/bin/sh do_something() { echo $@ return 1 } cat <<EOF > sample.text This is a sample text It serves no other purpose EOF cat sample.text | while read arg1 arg2 arg3 arg4 arg5; do ret=0 do_something "$arg1" "$sarg2" "$arg3" "$arg4" "$arg5" <&3 || ret=$? done 3<&1 将stdoutredirect为filedescriptor 3的input的目的是什么? 至less在Bash ,如果省略,似乎没有什么区别。 如果它在bash之外的任何其他shell中执行,它是否有效? UPDATE 对于那些想知道这是从哪里来的,这是从Debian的cryptdisks_start脚本简化的示例。

将在linux中运行汇编代码的结果redirect到文本文件

我正在尝试编写一个Python脚本来testing我编写的一些代码的输出与预期的输出。 但是,我很难将输出redirect到一个文件。 我写了以下内容: extern printf LINUX equ 80H ; interupt number for entering Linux kernel EXIT equ 1 ; Linux system call 1 ie exit () section .data intfmt: db "%ld", 10, 0 segment .text global main main: push rax push rsi push rdi mov rsi, 10 mov rdi, intfmt xor rax, rax call printf […]

将一个命令的输出redirect到多个命令

我知道使用pipe道,我可以将命令的输出redirect到另一个命令: cmd1 | cmd2 另外当我使用像这样的东西: cmd1 | cmd2 | cmd3 第二个pipe道使cmd3取得cmd2的输出。 我的问题是:是否有可能使cmd3采取cmd1的输出?

redirect到/ dev / null和简单closuresstream之间的有效区别是什么?

背景: 我想在一个受限制的bash的修改环境中testing一些bash脚本。 在受限制的bash中,我不允许将streamredirect到文件,例如2>/dev/null 我find了一个解决方法,只需closures与例如2>&- 虽然在这里和那里我发现2>/dev/null和2>&-之间没有有效的区别2>&- STDERR输出被吞并,不会出现。 $ bash -c 'ls FOO' ls: cannot access FOO: No such file or directory $ bash -c 'ls FOO 2>/dev/null' $ bash -rc 'ls FOO 2>/dev/null' bash: /dev/null: restricted: cannot redirect output $ bash -rc 'ls FOO 2>&-' $ bash -rc 'ls FOO 2>&- ; ls BAR' ls: cannot […]

未能将标准输出文件描述符重置为C中的原始值

这是我第一次发布到stackoverflow,所以如果我违反任何发布规则或省略任何必要的信息,请让我知道,我会解决这个问题。 所以,我正在尝试使用C来构build一个用于作业分配的shell,并且在input/输出redirect时遇到了麻烦。 我可以将某些inputredirect到文件(通过将stdout指向该文件),但是当我尝试将stdout重置回原始文件描述符值时出现错误。 如果我试图剔除之前用作stdout的文件,我得到错误cat:myfile:input文件是输出文件,而且,如果我尝试输出其他内容,则会将其写入该文件。 这里是我认为问题可能出现的地方(即在父执行之后执行的if语句): int runCommand(char** args,int inputFD,int outputFD) { int status; int savedStdOut = dup(STDOUT_FILENO); //save original stdout descriptor int savedStdIn = dup(STDIN_FILENO); //save original stdin descriptor if(savedStdOut == -1 || savedStdIn == -1) { perror("Error"); exit(EXIT_FAILURE); } pid_t spawnpid = fork(); if(spawnpid == CHILD) //if child { if(outputFD > 0) //if there […]