[cmdline] Match user expectations for &&, ||, goto, and exit

The && and || operators should be left-associative, since that is how
they are treated in most other languages (including C and Unix
shell).  For example, in the command:

  dhcp net0 && goto dhcp_ok || echo No DHCP on net0

if the "dhcp net0" fails then the "echo" should be executed.

After an "exit" or a successful "goto", further commands on the same
line should never be executed.  For example:

  goto somewhere && echo This should never be printed
  exit 0 && echo This should never be printed
  exit 1 && echo This should never be printed

An "exit" should cause the current shell or script to terminate and
return the specified exit status to its caller.  For example:

  chain test.ipxe && echo Success || echo Failure
    [in test.ipxe]
    #!ipxe
    exit 0

should echo "Success".

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2010-11-29 14:19:59 +00:00
parent 01df5c510f
commit 7bebe9579e
5 changed files with 94 additions and 52 deletions

View File

@@ -84,8 +84,7 @@ int shell ( void ) {
rc = system ( line );
free ( line );
}
} while ( shell_exit == 0 );
shell_exit = 0;
} while ( ! shell_stopped ( SHELL_STOP_COMMAND_SEQUENCE ) );
return rc;
}