如果是,在哪个操作系统,shell或其他什么?
考虑下面的java程序(我只是以java为例,任何语言对这个问题都有好处,更多的是关于操作系统):
public class ExitCode {
public static void main(String args[]) {
System.exit(Integer.parseInt(args[0]));
}
}
Run Code Online (Sandbox Code Playgroud)
在Linux和bash上运行它,它总是返回不等于255的值,例如(echo $?打印上一个执行命令的退出代码)
> java ExitCode 2; echo $?
2
> java ExitCode 128; echo $?
128
> java ExitCode 255; echo $?
255
> java ExitCode 256; echo $?
0
> java ExitCode 65536; echo $?
0
Run Code Online (Sandbox Code Playgroud)
编辑:下面的(只有,到目前为止)答案完全解释了在UNIX上发生的事情.我仍然想知道其他操作系统.
首先让我解释一下我想要实现的目标.基本上有两个Perl脚本.一个是我用UI调用主脚本.运行此脚本的用户将看到他可以从菜单中调用的其他脚本的列表.此列表通过自定义配置文件加载.主脚本的目的是能够根据需要在将来添加其他脚本而不更改源,并作为cron作业(非交互模式)和用户需要(交互模式)运行.作为公司政策,我无权发布整个脚本,因此我将发布交互模式用户选择部分:
for($i = 0;$i < @{$conf}+1;$i++)
{
if($i % 2 == 1 || $i == 0)
{
next;
}
print $n++ . ". @{$conf}[$i-1]\n";
}
print "(health_check) ";
#
# User selection
#
my $in = <>;
chomp($in);
if($in =~ /[A-Za-z]/)
{
write_log("[*] Invalid Selection: $in");
print "\n<<<<<<<<<<<<>>>>>>>>>>>>>\n";
print ">>> Invalid Selection <<<\n";
print "<<<<<<<<<<<<>>>>>>>>>>>>>\n";
}
elsif($in == 0)
{
write_log("Exiting interactive mode");
last;
}
elsif(scalar($scripts[$in]))
{
write_log("[*] running: $scripts[$in]");
$rez = system('./' . "$scripts[$in]");
if($rez == 0b00)
{
printf("%s: …Run Code Online (Sandbox Code Playgroud)