bash:一行上的多个命令具有不同的退出代码

Pin*_*oyd 0 bash exit command

我使用中提供的函数bashc++代码运行命令。我的问题不是关于实现,而是与我的问题相关的一件事,是我必须在一行上运行多个命令。systemcstdlibc++

例如,我运行包含在另一个目录中的 gnuplot 脚本。所以我的命令如下:

cd some/path; gnuplot -e gnuplot_file.gp; cd - > /dev/NULL
Run Code Online (Sandbox Code Playgroud)

cd由于个人原因,这两个命令都很重要。我也想“隐藏”输出/dev/NULL.

这是我的问题:我怎么知道gnuplot命令的退出状态?知道它是否失败就足够了。

我的问题是我目前获得了最后一个命令的退出状态,即使gnuplot失败也是如此。

我知道如果我使用&&而不是;,如果前一个命令失败并且退出状态将为假,则不会执行最后一个命令。但是我需要执行最后一个命令...

解决方法是什么?

roa*_*ima 6

将其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)