使用system()时使用的隐藏控制台命令?C++;Linux 我将简单明了地说:我是C++的Payb。但仍在努力学习
我的问题是:是否可以使用system()命令通过终端运行命令,而不让命令显示在控制台/终端中 例如:使用system()时使用的隐藏控制台命令?C++;Linux 我将简单明了地说:我是C++的Payb。但仍在努力学习,c++,linux,C++,Linux,我的问题是:是否可以使用system()命令通过终端运行命令,而不让命令显示在控制台/终端中 例如: system("sudo service sshd start") ; Output: Sudo service sshd start 如我所愿: system("sudo service sshd start") ; output: (Blank) 注意:我在linux上。标准库函数启动子shell,并将提供的字符串作为该子shell中的命令执行。(请注意,子shell只是一个运行shel
system("sudo service sshd start") ;
Output: Sudo service sshd start
如我所愿:
system("sudo service sshd start") ;
output: (Blank)
注意:我在linux上。标准库函数启动子shell,并将提供的字符串作为该子shell中的命令执行。(请注意,子shell只是一个运行shell解释器的进程;
system
调用的特定shell解释器将取决于您的系统。不使用终端仿真器;至少在Unix或类似Unix的系统上不使用。)
系统
函数在启动子shell之前不会重新分配任何文件描述符,因此该命令使用当前的标准输入、输出和错误分配执行。许多命令将输出到stdout和/或stderr,这些输出不会被系统抑制
如果希望命令以静默方式执行,则可以在命令本身中重定向stdout和/或stderr:
system("sudo service sshd start >>/dev/null 2>>/dev/null") ;
当然,这将隐藏任何可能由于命令失败而导致的错误消息,因此您应该检查system
的返回值,如果不是0,则提供您自己的错误消息(或记录信息)
这实际上与系统
调用或您从自己的可执行文件中触发子shell的事实关系不大。如果直接在shell中键入相同的命令,则该命令将具有相同的行为。从GNU libc使用。我无法重现该症状。我看到的是命令的输出,而不是命令本身。您是否在询问如何抑制命令的输出?如果是这样,它与C++无关。可能的副本也可以使用<代码>系统(“SUDO服务SSHD启动和> /DEV/NULL”);代码>。它比较短,并且执行的操作完全相同。@marccoll:&
是一个bash扩展,并且不能保证系统
调用bash
。它可能在您的机器上工作,但通常不能依赖它。即使在Code::Blocks IDE调试模式下也可以正常工作。谢谢你。但是我用的是
而不是>
。有什么问题吗?@sopalajo:
的语义涉及到截断目标文件,在某些实现中,截断/dev/null
可能是不允许的。(在其他系统上,比如Linux,它不做任何事情。)因此,通常使用>>
来附加到/dev/null
,这是可以保证工作的。