Skip to content

Instantly share code, notes, and snippets.

@hanabokuro
Created May 30, 2013 09:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hanabokuro/5676773 to your computer and use it in GitHub Desktop.
Save hanabokuro/5676773 to your computer and use it in GitHub Desktop.
予期せず本番DBを更新してしまわないようにするためのwrapper 本物のmysqlよりもPATHの先頭にくるようにしておく。 DBを更新したいときは /usr/bin/msql とfull pathで起動する。
#!/usr/bin/perl
use strict;
use warnings;
use Expect;
my $MYSQL_COMMAND = '/usr/bin/mysql';
my $expect = new Expect;
$expect->raw_pty(1);
$expect->debug(0);
$expect->spawn($MYSQL_COMMAND, @ARGV) or die "Cannot spawn $MYSQL_COMMAND: $!\n";
while($expect->pid){
my $is_prompt_shown = 0;
my @ret = $expect->expect(1,
[ qr/(^|\n|\007)\s*->\s*/i => sub { }, ],
[ qr/(^|\n|\007)mysql>\s*/i => sub { $is_prompt_shown = 1; }, ],
);
my $input = <STDIN>;
if($is_prompt_shown){
if($input =~ /^\s*\n/){ # empty
$input = " \n";
}elsif($input !~ /^\s*(select|show|desc|quit)/i){
chomp($input);
warn "forbidden[$input]\n";
$input = " \n";
}
}
$expect->send($input);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment