我尝试过各种方法将stdout和stderr重定向到/dev/null,但没有成功。我几乎有我的整个生命运行bash,我从来没有遇到过这个问题,但第一次在BSD,我被困在/bin/sh。
我试过的是:
if ls ./python* 2> /dev/null; then
echo found Python
fi
..。如果Python不存在,它将静音来自ls的错误消息。但是,如果存在python.tgz,则输出如下所示的一行:
# ./test.sh
./python-2.7.3p1.tgz
我试过:
if ls ./python* &> /dev/null; th
我已经编写了一个shell脚本来同步我的dotfiles存储库到我的主目录。这在Cygwin (zsh)中工作得很好,但我刚刚迁移到Linux ( Xubuntu 12.10上的zsh),它失败了。
该脚本在存储库中创建一个相关的点文件列表,然后在创建符号链接之前,它会将所有碰撞存档。归档例程如下:
for i in $dotFiles; do
toArchive=$toArchive $(ls -d $i)
done
当$dotfiles中的任何项都不存在时,此操作将失败;ls返回No such file or directory,脚本将终止。
将stderr重定向到/dev/null会
我正在研究如何将数据重定向到/dev/null,所以我尝试了一个简单的测试:
ping a.b.c # which results in an address not found
如果我尝试这样做:
ping a.b.c > /dev/null # prints the same error message as the one above
但是,如果我这样做:
ping a.b.c > /dev/null 2>&1 # The error message is gone
最后一个解决方案是所需的解决方案,但是这个2>&1发生了什么呢?到目前为止,我的
考虑以下Bash命令行:
time ls # Sends directory contents to stdout
time ls --foo # Sends an error message to stderr (--foo is an invalid option)
将time的输出(正常输出和错误输出)重定向到一个文件,将ls的输出重定向到另一个文件:
time ( ls &>ls.txt ) &>time.txt
time ( ls --foo &>ls.txt ) &>time.txt
将time
我试图理解管道,并对下面命令的结果感到困惑。
% ls 1>&2 2> /dev/null
Applications Users cores home sbin var
Library Volumes dev opt tmp
System bin etc private usr
我认为
1> &2将stdin重定向到stderr流2> /dev/null将stderr重定向到垃圾场所
因此,我认为上面的命令没有输出,但是命令确实输
对于即将到来的PulseAudio库,我想从逻辑上将STDERR和STDOUT重定向到/dev/null,这是可行的,
sub _exec {
open (*STDERR, '>', '/dev/null');
open (*STDOUT, '>', '/dev/null');
CORE::system('pacmd', @_ ) or die $?;
然而,这仍然是对术语的输出。
sub _exec {
local ( *STDERR, *STDOUT
我有一个小函数,允许我激活我的python虚拟环境,对于不同的repos,它有时是隐藏的(.venv),有时不是(venv)。我在抑制stderr时遇到了麻烦。 这是我的小函数(它位于~/.zshrc中) function venv {
source `ls -a $PWD/*/bin/activate` > /dev/null
if [[ $? -ne 0 ]]
then
source `ls -a $PWD/.*/bin/activate`
fi
} $PWD/*/bin/activate或$PWD/.*/bin/activate
我一直在使用快速守护一些脚本,并使它们具有启动/停止功能。但是,其中一些脚本是用python编写的,所以我通常先调用Daemon::Simple::Init(),然后再调用exec()。
然而,我发现Daemon::Simple::Init()会关闭STDOUT和STDERR,这似乎是python脚本在写入STDOUT和STDERR时中断(直接退出)的结果。在执行exec之前,重新打开STDOUT和STDERR并重定向到文件没有任何帮助。
我发现确实有帮助的是将Daemon::Simple的源代码从以下位置更改:
close(STDOUT);
close(STDERR);
至:
open ST
在AIX中,我尝试将STDERR和STDOUT重定向到/dev/null,但是重定向似乎没有发生。可能的问题是什么?
bash-3.2# /usr/sbin/lsgroup Test-Group | grep kbxb025 > /dev/null 2>&1
Group "Test-Group" does not exist.
我有一段代码,它启动一个进程,然后从stdout中读取,看看它是否加载正常。
在此之后,理想情况下,我希望将输出重定向到/dev/null或丢弃它的其他东西。我是(A)这种情况下的最佳实践是什么?(B)如果管道变满了,写入过程会发生什么?当管道已满且未被读取/清除时,它会阻塞吗?
如果目标是重定向到/dev/null,可以向我展示如何使用python和subprocess.Popen实现这一点吗?
proc = subprocess.Popen(command, stderr=subprocess.PIPE)
while True:
if init_string in proc.std
我的工作目录如下:
MyWorkDirectory
└── test
文件"test“包含一行信息:
1:2:3:4:5
当我使用以下命令时:
cat test foo
产出如下:
1:2:3:4:5
cat: foo: No such file or directory
我想忽略STDOUT,只处理STDERR,我想使用剪切命令将第三个STDERR段用“:”分隔开,所以我尝试了以下命令:
cat test foo 2>&1 1>/dev/null | cut -d ':' -f 3
我认为这里的产出应如下:
No such file or dire
my $cmd = "$exe build 2>&1 </dev/null";
my $FH = FileHandle->new;
open $FH, '-|', $cmd
or die "cannot open: $!";
close $FH;
现在,当我将$cmd更改为数组时
my @cmd = ($exe, 'fly', '2>&1', '</dev/null');
它似乎忽略了'2>&1‘和'</dev