our
$VERSION
=
'1.16.0'
;
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;
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;