Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

#
# (c) Jan Gehring <jan.gehring@gmail.com>
#
use v5.12.5;
our $VERSION = '1.16.0'; # VERSION
my %SHELL_PROVIDER = (
ash => "Rex::Interface::Shell::Ash",
bash => "Rex::Interface::Shell::Bash",
csh => "Rex::Interface::Shell::Csh",
idrac => "Rex::Interface::Shell::Idrac",
ksh => "Rex::Interface::Shell::Ksh",
sh => "Rex::Interface::Shell::Sh",
tcsh => "Rex::Interface::Shell::Tcsh",
zsh => "Rex::Interface::Shell::Zsh",
);
sub register_shell_provider {
my ( $class, $shell_name, $shell_class ) = @_;
$SHELL_PROVIDER{"\L$shell_name"} = $shell_class;
return 1;
}
sub get_shell_provider {
return %SHELL_PROVIDER;
}
sub create {
my ( $class, $shell ) = @_;
$shell =~ s/[\r\n]//gms; # sometimes there are some wired things...
my $klass = "Rex::Interface::Shell::\u$shell";
eval "use $klass";
if ($@) {
Rex::Logger::info(
"Can't load wanted shell: '$shell' ('$klass'). Using default shell.",
"warn" );
Rex::Logger::info(
"If you want to help the development of Rex please report this issue in our Github issue tracker.",
"warn"
);
$klass = "Rex::Interface::Shell::Default";
eval "use $klass";
}
return $klass->new;
}
1;