标签: dev-null

用于检查命令行是否重定向到 /dev/null 的 C 代码

我正在编写一个 C 程序,输出stdoutstderr. 该程序采用如下命令:

./myprogram function_to_run file_to_read
Run Code Online (Sandbox Code Playgroud)

我的程序可以输出到stdout或被定向到输出一个文件,但它不能被重定向到/dev/null. 例如:

./myprogram function_to_run file_to_read //OK
./myprogram function_to_run file_to_read > file.txt //OK
./myprogram function_to_run file_to_read > /dev/null // NOT OK, should produce error in stderr
Run Code Online (Sandbox Code Playgroud)

我尝试使用isatty(1),但它只能检测是否stdout正在输出到终端。因此,它在stdout重定向到文件的情况下失败,这在我的情况下是可以接受的

有没有办法在 C 中检查这个?如果没有,我有什么建议可以检查 /dev/null 场景吗?

c io-redirection dev-null

4
推荐指数
1
解决办法
2349
查看次数

Python压缩shell输出

我的Python脚本通过os.system调用shell命令:

os.system('sudo ifdown wlan0 &> /dev/null')
Run Code Online (Sandbox Code Playgroud)

如果我在没有Python的情况下运行此命令,则在Python中输出被抑制,但是,它仍会打印输出.

我究竟做错了什么?

python shell dev-null

4
推荐指数
1
解决办法
1112
查看次数

Bash:根据标志重定向到屏幕或 /dev/null

我正在尝试想出一种方法脚本来在 bash 中传递一个无声标志,以便所有输出都将被定向到/dev/null它是否存在,如果它不存在则定向到屏幕。

我的脚本的 MWE 将是:

#!/bin/bash

# Check if silent flag is on.    
if [ $2 = "-s" ]; then
    echo "Silent mode."
    # Non-working line.
    out_var = "to screen"
else
    echo $1
    # Non-working line.
    out_var = "/dev/null"
fi

command1 > out_var

command2 > out_var

echo "End."
Run Code Online (Sandbox Code Playgroud)

我用两个变量调用脚本,第一个是不相关的,第二个 ( $2) 是实际的静默标志( -s):

./myscript.sh first_variable -s
Run Code Online (Sandbox Code Playgroud)

显然,out_var行不工作,但他们给我想要的东西的想法:以直销的方式输出command1,并command2在屏幕或来/dev/null根据-s存在与否。

我怎么能这样做?

bash dev-null

3
推荐指数
1
解决办法
1733
查看次数

忽略 shell 脚本输出中的错误

如果 ICMP 回显失败,我想忽略此 IF 语句中的错误。

示例代码:

if ping -q -c 1 -W 1 1.2.3.4 >/dev/null; then
  echo -e "PING OK"
else
  echo -e "PING NOK"
fi
Run Code Online (Sandbox Code Playgroud)

如果 ping 成功或者您在脚本之外运行命令,它会完美运行,但如果没有响应,则会给出以下输出。

PING 1.2.3.4 (1.2.3.4): 56 data bytes

--- 1.2.3.4 ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss
PING NOK
Run Code Online (Sandbox Code Playgroud)

我已经看到了引用 2>/dev/null 的答案,但这会在输出中显示整个 ping 查询,无论成功与否!2>/dev/null 的示例如下。

PING 1.2.3.4 (1.2.3.4): 56 data bytes

--- 1.2.3.4 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = …
Run Code Online (Sandbox Code Playgroud)

bash shell if-statement ping dev-null

3
推荐指数
1
解决办法
620
查看次数

如何在 Windows (10) 上写入 NULL 设备/文件,以便我**不能**读回写入的内容?

Windows 确实有一个空设备的概念,例如此处此处此处详细介绍。我能找到的所有示例都是关于重定向流的。

在将脚本从 Linux 移植到 Windows 时,我遇到了一些奇怪的事情:如果nul像文件一样打开,我会写入它,关闭它,重新打开它并读回数据。有时。检查工作目录,我可以看到一个名为 的文件nul正在创建,并且随着我向其中写入数据而不断增长。具有讽刺意味的是,我无法从资源管理器中删除它,只能从命令行中删除它。

如今,Windows 10 附带了 OpenSSH 的本机实现。我想使用一个老技巧:当它查找文件时known_hosts,我想将其指向一个空设备。在 Linux 上,这看起来如下ssh -o UserKnownHostsFile=/dev/null user@host:在 Windows 上,我测试如下ssh -o UserKnownHostsFile=nul user@host:我得到了一个名为nul包含主机的文件。我也尝试过NULnull结果NULL相同。试图指向\Device\Null/Device/Null导致ssh抱怨它无法找到/打开这些文件。

如何在 Windows (10) 上正确使用和/或指向空设备?

windows dev-null

3
推荐指数
1
解决办法
3243
查看次数

打开和写入/ dev/null的特殊处理?

根据另一个线程的提示,我想分析指针,如果它们的解引用会导致分段错误.想法是编写这样的代码:

bool IsPointerValid( void* pPointer )
{
    // when opening "/tmp/hugo" here, it works fine... but not with /dev/null??
    int iFD = open( "/dev/null", O_WRONLY );
    int iBytesWritten = write( iFD, pPointer, 4 );
    close( iFD );

    return iBytesWritten > 0;
}
Run Code Online (Sandbox Code Playgroud)

但whatevery我传递到IsPointerValid(..),它返回总是如此-因为iBytesWritten始终4.但是当打开"/tmp/testfile"或者是fifo时,它会像预期的那样工作:传递NULL指针write(..),它返回-1.

这种特殊治疗的原因是"/dev/null"什么?

谢谢,

查理

linux gcc g++ dev-null

2
推荐指数
1
解决办法
2162
查看次数

将文件下载为null(Windows CLI)

我想在windows cli中将文件下载为null,仅用于测试目的.

在linux中我使用过

wget http://download.thinkbroadband.com/1GB.zip -O /dev/null
Run Code Online (Sandbox Code Playgroud)

这使我的连接忙了一段时间.

有没有办法在Windows 7的命令提示符或电源shell中执行此操作?

此外,还将接受其他解决方案,以便从互联网产生流量,并将其保存到磁盘.

windows wget download network-traffic dev-null

2
推荐指数
1
解决办法
5904
查看次数

&> /dev/null 的“对立面”

我使用以下脚本与文件夹进行比较:

if diff "/home/folder1/" "/home/folder2/" &> /dev/null ; then
    echo "Files in the two folders are the same"    
else
    echo "Files in the two folders are NOT the same"
fi
Run Code Online (Sandbox Code Playgroud)

是否有一个简短的方法来解释“&> /dev/null”实际上是做什么的,它是否返回一个布尔值真/假?

我的主要问题是:相反会是什么?我的意思是,假设我希望“if diff”问题是“两个文件夹的内容不一样吗?”

bash if-statement dev-null

2
推荐指数
1
解决办法
6595
查看次数

linux:从终端分离后,将标准输出关闭或重定向到/ dev/null

我们有一个linux代码,可以根据http://www.itp.uzh.ch/~dpotter/howto/daemonize上的实现从终端分离.

这是一个代码片段:

....
freopen( "/dev/null", "r", stdin);
freopen( "/dev/null", "w", stdout);
freopen( "/dev/null", "w", stderr);

kill( parent, SIGUSR1 );
}
Run Code Online (Sandbox Code Playgroud)

我可以通过以下方式关闭标准文件描述符,而不是重定向到/ dev/null,并获得相同的结果:

close(STDIN_FILENO);     
close(STDOUT_FILENO); 
close(STDERR_FILENO);
Run Code Online (Sandbox Code Playgroud)

现在,我对使用什么方法有点困惑:重定向还是关闭?每种方法的潜在问题是什么?

c linux terminal daemon dev-null

2
推荐指数
1
解决办法
1417
查看次数

>/dev/null如何占用输出流?

/dev/null在bash编程中使用了很多东西将不必要的输出发送到黑洞.

例如,这个命令:

$ echo 'foo bar' > /dev/null
$ 
Run Code Online (Sandbox Code Playgroud)

echo什么都不会.我读过这/dev/null是一个空文件,用于通过重定向处理不需要的输出.但这种处置究竟是如何进行的?我无法想象/dev/null将内容写入文件然后立即删除该文件.那么当你重定向到这个文件时会发生什么?

unix bash dev-null

2
推荐指数
1
解决办法
252
查看次数

/ dev/null总是可以打开吗?

我想fprintf通过将目标文件重定向到来禁止某些调用/dev/null.但我能确定,fopen("/dev/null", "w");永远不会回来NULL.换句话说,是否每次都可以打开这个"文件"?

如果是这样,我可以使用这个漂亮的三元运算符:

FILE *whereToPrint = (strcmp(custom_topic, ERROR_TOPIC) == 0) ? fopen("/dev/null", "w") : stdout;

fprintf(whereToPrint, "Message sent!\n\n");
Run Code Online (Sandbox Code Playgroud)

c dev-null

1
推荐指数
2
解决办法
2102
查看次数

如何使用`with` 语句来抑制`sys.stdout` 或`sys.stderr`?

我正在尝试使用with声明来抑制sys.stdoutsys.stderr单独使用。 我发现了一个不起作用的教程。我正在使用Python 3.6.4并且我认为该教程是Python 2.

我在 SO 上查了一下,发现了一些但应用程序不起作用或不适用于这种情况。

这不适用:Python subprocess supress stdout and stderr

无法使任何with语句起作用: Suppress stdout / stderr print from Python functions

这适用于 fortran:在 Python 中重定向 FORTRAN(通过 F2PY 调用)输出

from contextlib import contextmanager
@contextmanager
def suppress_console(file=sys.stdout):
    with open(os.devnull, "w") as devnull:
        old_file = file
        file = devnull
        try:  
            yield
        finally:
            file = old_file

with suppress_console():
    print(1, file=sys.stdout)
# 1
Run Code Online (Sandbox Code Playgroud)

python stdout suppress stderr dev-null

0
推荐指数
1
解决办法
1172
查看次数