我使用中提供的函数bash
从c++
代码运行命令。我的问题不是关于实现,而是与我的问题相关的一件事,是我必须在一行上运行多个命令。system
cstdlib
c++
例如,我运行包含在另一个目录中的 gnuplot 脚本。所以我的命令如下:
cd some/path; gnuplot -e gnuplot_file.gp; cd - > /dev/NULL
Run Code Online (Sandbox Code Playgroud)
cd
由于个人原因,这两个命令都很重要。我也想“隐藏”输出/dev/NULL
.
这是我的问题:我怎么知道gnuplot
命令的退出状态?知道它是否失败就足够了。
我的问题是我目前获得了最后一个命令的退出状态,即使gnuplot
失败也是如此。
我知道如果我使用&&
而不是;
,如果前一个命令失败并且退出状态将为假,则不会执行最后一个命令。但是我需要执行最后一个命令...
解决方法是什么?
将其gnuplot
放入子shell,然后它是执行的最后一个命令。您也不再需要最后一个,cd
因为子shell开头的目录更改仅影响gnuplot
,因此重定向到/dev/null
也没有实际意义。
( cd some/path; gnuplot -e gnuplot_file.gp )
Run Code Online (Sandbox Code Playgroud)
也许您打算将重定向/dev/null
应用于整个命令?(不过,这不是您在问题中所写的内容。)
( cd some/path; gnuplot -e gnuplot_file.gp ) >/dev/null
Run Code Online (Sandbox Code Playgroud)
最后,我对这样的片段的偏好是,gnuplot
只有在初始cd
成功时才运行。这会影响退出状态,因为如果目录更改失败,您将获得失败的返回,但可能是更安全的代码
( cd some/path && gnuplot -e gnuplot_file.gp ) >/dev/null
Run Code Online (Sandbox Code Playgroud)