强制终端命令返回“坏”(非 0)代码?

强制终端命令返回“坏”(非 0)代码?

我有一个用 python 编写的框架,出于测试目的,我基本上想做一个子进程(又名 shell 调用)...它应该简单地返回 RC != 0。我试图调用一些不存在的可执行文件;或者运行“exit 1”;但由于某种原因,这些被转换为 FileNotFoundError。

那么,我还能做些什么来触发返回代码!= 0(以“可靠”的方式;意味着命令不应该在未来的某个时间点突然返回 0)。

我想“搜索”一个名为 exit 的二进制文件,但是:

> /usr/bin/env exit
/usr/bin/env: exit: No such file or directory

答案1

如果你正在寻找系统命令总是返回非零的退出代码,那么/bin/false看起来它应该对你有用。来自man false

NAME
       false - do nothing, unsuccessfully

SYNOPSIS
       false [ignored command line arguments]
       false OPTION

DESCRIPTION
       Exit with a status code indicating failure.

答案2

您可以使用命令创建新的返回代码bash -c "exit RETURNCODE",将“RETURNCODE”替换为任意数字。请注意,它将被 (RETURNCODE mod 256) 修剪为 8 位无符号整数 (0...255)

您可以检查最后一个 shell 命令的返回码在终端内(!)执行echo $?。“$?”变量包含最新的返回代码,“echo”将其打印到标准输出。

答案3

经过更多的测试后,我发现我的问题不在“Linux”方面。

Python 有一个模块 shlex; 应该用来“拆分”命令字符串。当我将子进程调用更改为使用shlex.split()调用“bash exit 1”的输出时,我得到了我需要的东西。

相关内容