|
Line 0
Link Here
|
| 0 |
- |
1 |
#!/usr/bin/perl |
|
|
2 |
# koha-shell -- put you in a shell with a koha environment set up |
| 3 |
# Copyright 2012 Catalyst IT, Ltd |
| 4 |
# |
| 5 |
# This program is free software: you can redistribute it and/or modify |
| 6 |
# it under the terms of the GNU General Public License as published by |
| 7 |
# the Free Software Foundation, either version 3 of the License, or |
| 8 |
# (at your option) any later version. |
| 9 |
# |
| 10 |
# This program is distributed in the hope that it will be useful, |
| 11 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 13 |
# GNU General Public License for more details. |
| 14 |
# |
| 15 |
# You should have received a copy of the GNU General Public License |
| 16 |
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
| 17 |
|
| 18 |
use Getopt::Long; |
| 19 |
use Modern::Perl; |
| 20 |
|
| 21 |
Getopt::Long::Configure("bundling"); |
| 22 |
|
| 23 |
my %opts; |
| 24 |
my $res = GetOptions( \%opts, "command|c=s", "help|h", "login|l", "shell|s=s", |
| 25 |
"preserve-environment|p|m", "verbose|v" ); |
| 26 |
|
| 27 |
if ( !$res || $opts{help} ) { |
| 28 |
show_help( !$res ); |
| 29 |
exit( !$res ); |
| 30 |
} |
| 31 |
|
| 32 |
if ( !@ARGV ) { |
| 33 |
show_help( 1, "An instance name must be supplied." ); |
| 34 |
exit(1); |
| 35 |
} |
| 36 |
my $instance = shift @ARGV; |
| 37 |
if ( !-e "/etc/koha/sites/$instance" ) { |
| 38 |
show_help( 1, "The instance doesn't exist: $instance" ); |
| 39 |
exit(1); |
| 40 |
} |
| 41 |
my $shell = $opts{shell} || $ENV{SHELL} || '/bin/sh'; |
| 42 |
|
| 43 |
# Now we're set up, build the 'su' command |
| 44 |
my @su_args; |
| 45 |
push @su_args, '/bin/su'; |
| 46 |
push @su_args, '--preserve-environment' if $opts{'preserve-environment'}; |
| 47 |
push @su_args, '--login' if $opts{login}; |
| 48 |
push @su_args, '--command', |
| 49 |
"env " |
| 50 |
. "KOHA_CONF=/etc/koha/sites/$instance/koha-conf.xml " |
| 51 |
. "PERL5LIB=/usr/share/koha/lib $shell" |
| 52 |
. ( $opts{command} ? " -c '$opts{command}'" : '' ); |
| 53 |
push @su_args, "$instance-koha"; |
| 54 |
|
| 55 |
print "Command: '".join("' '",@su_args)."'\n" if $opts{verbose}; |
| 56 |
system(@su_args); |
| 57 |
if ( $? == -1 ) { |
| 58 |
print STDERR "failed to execute: $!\n"; |
| 59 |
} |
| 60 |
elsif ( $? & 127 ) { |
| 61 |
printf STDERR "child died with signal %d, %s coredump\n", |
| 62 |
( $? & 127 ), ( $? & 128 ) ? 'with' : 'without'; |
| 63 |
} |
| 64 |
|
| 65 |
sub show_help { |
| 66 |
my ( $err, $msg ) = @_; |
| 67 |
|
| 68 |
my $fh = $err ? *STDERR : *STDOUT; |
| 69 |
say $fh "Error: " . $msg if $msg; |
| 70 |
print $fh $_ while <DATA>; |
| 71 |
} |
| 72 |
|
| 73 |
__DATA__ |
| 74 |
koha-shell -- gives you a shell with your Koha environment set up |
| 75 |
|
| 76 |
Usage: koha-shell [options] [instance name] |
| 77 |
|
| 78 |
Options: |
| 79 |
-c, --command COMMAND pass COMMAND to the invoked shell |
| 80 |
-h, --help show this help and quit |
| 81 |
-l, --login make the shell a login shell |
| 82 |
-m, -p, |
| 83 |
--preserve-environment do not reset environment variables |
| 84 |
-s, --shell SHELL use SHELL instead of the one from your environment |
| 85 |
-v, --verbose output the full command that will be executed |
| 86 |
|
| 87 |
The default shell is the one currently in use. Refer to su(1) for more detail |
| 88 |
on these options. |